Как получить текст выбранного узла с помощью Beautifulsoup - PullRequest
0 голосов
/ 23 мая 2018

Использование BeautifulSoup в первый раз и не в состоянии понять, как я могу извлечь текст из какого-то определенного узла.Вот мой код

html:

...
<p class="dsm">...</p>
<ul class="also">
    <li>once as the adjective <i class="ab">abdrea</i> (<span class="at">groups</span>)</li>
    <li>twice as the noun <i class="ab">shokdia</i> (<span class="at">techs</span>)</li>
</ul>
...

python:

current_page = urlopen(url)
current_soup = BeautifulSoup(current_page, 'html.parser')
derivative_list = current_soup.select('p.dsm + ul.also li')
for li in derivative_list:
    print(li)

output:

<li>once as the adjective <i class="ab">abdrea</i> (<span class="at">groups</span>)</li>
<li>twice as the noun <i class="ab">shokdia</i> (<span class="at">techs</span>)</li>

Выводит правильные элементы списка,но я хочу получить текстовые значения i.ab и span.at, что-то вроде

желаемый вывод:

abdrea, groups
shokdia, techs

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

После получения списка всех тегов <li> просто выполните итерации по ним и найдите тексты тегов <i class="ab"> и <span class="at"> по отдельности.

for li in soup.select('p.dsm + ul.also li'):
    print(li.i.text, li.span.text)
# abdrea groups
# shokdia techs

Если есть другие <i> и <span> теги внутри тегов <li>, вы можете использовать find() в переменной li.

for li in soup.select('p.dsm + ul.also li'):
    print(li.find('i', class_='ab').text, li.find('span', class_='at').text)
0 голосов
/ 23 мая 2018

Точный ответ, который вы ищете:

data = """<ul class="also">
    <li>once as the adjective <i class="ab">abdrea</i> (<span class="at">groups</span>)</li>
    <li>twice as the noun <i class="ab">shokdia</i> (<span class="at">techs</span>)</li>
</ul>"""

from bs4 import BeautifulSoup
page_soup = BeautifulSoup(data, "html.parser")
i_data, span_data= zip([x.text for x in page_soup.find_all("i")], [y.text for y in page_soup.find_all("span")])

print(i_data )
print(span_data)

вывод:

(u'abdrea', u'groups')
(u'shokdia', u'techs')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...