1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.

Как извлечь текст из тега и потом заменить его с помощью Soup Python?

Тема в разделе "python", создана пользователем searchengines, 5 июн 2019.


Поделиться в соц сетях

  1. searchengines

    searchengines Administrator

    Регистрация:
    5 янв 2019
    Сообщения:
    1.671
    Симпатии:
    2
    Баллы:
    38
    Есть такой кусочек HTML кода:

    <div class="f-subheader subheader f-subheader-sm" data-editable="true" data-main-class="subheader" data-param="subheader">
    <p>
    holding educativo internacional
    </p>
    <p>
    Academia STANDART LONDRES
    </p>
    </div>
    <div class="f-header header f-header-72" data-editable="true" data-main-class="header" data-param="header">
    <p>
    <br/>
    </p>
    <p>
    <br/>
    </p>
    <p>
    <br/>
    </p>
    <h1>
    Модные курсы и семинары
    <br/>
    парикмахеров, стилистов, визажистов, косметологов И мастеров маникюра
    </h1>
    </div>
    <div class="f-desc description f-desc-xl" data-editable="true" data-main-class="description" data-param="description">
    <p>
    <strong>
    ЕВРОПЕЙСКИЙ СТАНДАРТ ОБУЧЕНИЯ В Мексике и Колумбии
    <br/>
    ОТ ЭКСПЕРТОВ КРАСОТЫ ИЗ ЛОНДОНА
    </strong>
    <br/>
    </p>
    </div>
    <div class="buttons" data-main-class="buttons">
    <button class="btn f-btn btn-success" id="button3504888" style="color: #FFFFFF; background-color: #E31e24; " type="button">
    Ver todos los cursos
    </button>


    И Python

    soup = Soup(html, features="html.parser")
    tags = ['span', 'p', 'b', 'a', 'div', 'li', 'h1', 'h2', 'h3', 'button',
    'small', 'strong', 'td', 'img', 'input']

    for tag in tags:
    for htmltag in soup.find_all(tag):
    try:
    # print(f'Text: {htmltag.text}, string: {htmltag.string}')
    if htmltag.string and len(htmltag.string) > 0:
    # print(f'Tag <{tag}> String: {htmltag.string}')
    translated = translator.translate(htmltag.string, dest=lang)
    print(f'<{tag}> {htmltag.string} > {translated.text}')
    htmltag.string.replace_with(translated.text)
    elif tag == 'img' and 'alt' in htmltag.attrs and len(htmltag["alt"]) > 0:
    # print(f'Tag <{tag}> Alt: {htmltag["alt"]}')
    translated = translator.translate(htmltag['alt'], dest=lang)
    print(f'<{tag}> {htmltag["alt"]} > {translated.text}')
    htmltag['alt'] = translated.text
    elif tag == 'input' and 'placeholder' in htmltag.attrs and len(htmltag["placeholder"]):
    # print(f'Tag <{tag}> Placeholder: {htmltag["placeholder"]}')
    translated = translator.translate(htmltag['placeholder'], dest=lang)
    print(f'<{tag}> {htmltag["placeholder"]} > {translated.text}')
    htmltag['placeholder'] = translated.text
    except Exception as e:
    pass
    print(f'*** ERROR Tag: {tag} , htmltag: {htmltag} , Str: {htmltag.string} / Err: {e} ***')
    errors += 1


    Через html.text он находит текст, но и так же находит и код тега <script> если он в блоке <div>, чего не делает метод htmltag.string А через .string он, как я понял, не находит текст, который включает в себя </br> или еще что-то Как извлекать текст и заменять его потом во всех тегах, в которых он есть?
     

Поделиться этой страницей