Вопрос по использованию beautifulsoup для разбора html - PullRequest
0 голосов
/ 01 февраля 2020

Я только начал учиться использовать BeautifulSoup в Python для разбора html и у меня очень простой глупый вопрос. Почему-то я просто не смог получить текст 1 только из html ниже (хранится в контейнерах).

....
<div class="listA">
<span><span>Text 1</span><b>Text 2</b><b>Text 3</b></span>
</div>
...
soup = BeautifulSoup(driver.page_source, 'html.parser')
containers = soup.findAll("div", {"class": "listA"})
datas = []
for data in containers:
    textspan = data.find("span")
    datas.append(textspan.text)

Вывод выглядит следующим образом: Text1Text2Text3

Любой совет, как их разграничить? Спасибо и высоко ценится!

Ответы [ 2 ]

0 голосов
/ 02 февраля 2020

Другое решение включает упрощенный c, который не зависит от сторонних библиотек, легче и быстрее, идеально подходит для начинающих. Вот еще примеры здесь

from simplified_scrapy.simplified_doc import SimplifiedDoc
html ='''
<span><span>Text 1</span><b>Text 2</b><b>Text 3</b></span>
'''
doc = SimplifiedDoc(html)
span = doc.span # Get the outermost span
first = span.span # Get the first span in span
print (first.text)
second = span.b
print (second.text)
third = second.next
print (third.text)

Результат:

Text 1
Text 2
Text 3
0 голосов
/ 01 февраля 2020

если вы просто хотите Текст 1 используйте этот код

import bs4

content = "<span><span>Text 1</span><b>Text 2</b><b>Text 3</b></span>"
soup = bs4.BeautifulSoup(content, 'html.parser')


# soup('span') will give you
# [<span><span>Text 1</span><b>Text 2</b><b>Text 3</b></span>, <span>Text 1</span>]

span_text = soup('span')

for e in span_text:
    if not e('span'):
        print(e.text) 

Вывод:

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