Извлечь текст тега из строки BeautifulSoup - PullRequest
0 голосов
/ 16 апреля 2019

Недавно я работал над проектом по соскобам. Я немного новичок в этом, но смог сделать почти все, но у меня возникли проблемы с небольшой проблемой. Я захватил каждую строку новостной статьи, делая это:

lines=bs.find('div',{'class':'Text'}).find_all('div')

Но по некоторым причинам есть строки, которые содержат тег h2 и тег br, например:

 <div><div><h2>Header2</h2></div><div><br/></div><div>Paragraph text

Так что, если я запускаю .text в этом фрагменте, я получаю «Header2Paragraph text». У меня есть текст "Header2", хранящийся в другой строке, поэтому я хочу удалить это второе появление.

Мне удалось выделить эти строки, выполнив следующее:

for n,t in enumerate(lines):
    if t.find('h2') is not None and t.find('br') is not None:
        print('\n',n,':',t)

Но я не знаю, как стереть текст, связанный с тегом h2, поэтому эти строки становятся «текстом абзаца» вместо «текста Header2Paragraph». Что я могу сделать? Спасибо

1 Ответ

0 голосов
/ 16 апреля 2019

Используйте .get_text(split=' ') вместо .text, и вы получите текст с пробелом "Header2 Paragraph text"

Вы также можете использовать другой символ - т.е. "|" - .get_text(split='|') и вы получите "Header2|Paragraph text".

И затем вы можете использовать split("|"), чтобы получить список ["Header2", "Paragraph text"] и сохранить последний элемент.


Вы также можете найти h2 и clear() или extract() этот тег, а позже вы можете получить текст со всех div, и вы получите без "Header2"


Документация: get_text () , clear () , extract ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...