Получить полный текст контента, пересекаемого тегом с Beautiful Soup - PullRequest
1 голос
/ 10 января 2020

Скажем, у меня есть HTML, как показано ниже.

<p>This is the beginning of the text. <em>Italicized middle</em> This is the end of the text.</p>

Это тег с другим тегом внутри. Я могу использовать Beautiful Soup, чтобы получить его содержимое:

list_of_tags = full_html.findAll()

for tag in list_of_tags:
    print(tag.find(text = True))

Это печатает:

This is the beginning of the text. 
Italicized middle

Отрезает конечную часть - все, что находится после содержимого тега. Как найти эту часть?

Ответы [ 2 ]

1 голос
/ 10 января 2020

Если вы хотите получить все данные без разделения, вы можете использовать следующие методы:

from simplified_scrapy.simplified_doc import SimplifiedDoc 
html = '''<p>This is the beginning of the text. <em>Italicized middle</em> This is the end of the text.</p>
'''
doc = SimplifiedDoc(html)
print (doc.p.text)

Результат:

This is the beginning of the text. Italicized middle This is the end of the text.
1 голос
/ 10 января 2020

Благодаря помощи ggorlen я изменил свою программу, чтобы она работала немного иначе. Сначала он изменяет содержимое тега, чтобы он был выделен курсивом в разметке (я решил, что это хороший способ выделить guish для моих целей.

for tag in tag_list:
    if tag.name == "em":
        tag.string.replace_with("*" + tag.string + "*")
    if tag.name == "strong":
        tag.string.replace_with("**" + tag.string + "**")

Затем в отдельном l oop, я получил текст всего, что не было тегом, который я изменил выше (в противном случае это было бы рекурсивно), а затем добавил его .text в список.

for tag in tag_list:
    if tag.name == "strong" || tag.name == "em":
        continue

    else:
        my_list.append(tag.text)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...