Элемент соскоба проблем и дочерний текст с lxml & etree - PullRequest
0 голосов
/ 03 февраля 2019

Я пытаюсь очистить списки со страниц Википедии (например, вот этот: https://de.wikipedia.org/wiki/Liste_der_Bisch%C3%B6fe_von_Sk%C3%A1lholt) в определенном формате. У меня возникают проблемы с совпадением слов "li" и "href".

Например, на приведенной выше странице девятая пуля содержит текст:

1238–1268: Сигвардур Штетмарссон (Норвеж)

с HTML:

 <li>1238–1268: <a href="/wiki/Sigvar%C3%B0ur_%C3%9E%C3%A9ttmarsson" title="Sigvarður Þéttmarsson">Sigvarður Þéttmarsson</a> (Norweger)</li>

Я хочу собрать его как словарь:

'1238–1268: Сигвардур Четтмарссон (Норвеж):' / wiki / Sigvar% C3% B0ur_% C3% 9E% C3%A9ttmarsson '

[Весь текст обеих частей' li 'и' a 'child]: [href of' a 'child]

Я знаю, что могу использовать lxml / etree для этого, но я не совсем уверен, как. Некоторая рекомбинация ниже?

from lxml import etree
tree = etree.HTML(html)

bishops = tree.cssselect('li').text for bishop
text = [li.text for li in bishops]

links = tree.cssselect('li a')
hrefs = [bishop.get('href') for bishop in links]

1 Ответ

0 голосов
/ 04 февраля 2019

Обновление: я понял это с помощью BeautifulSoup следующим образом:

 from bs4 import BeautifulSoup

 html = driver.page_source
 soup = BeautifulSoup(html, 'html.parser')

 bishops_with_links = {}
 bishops = soup.select('li')

 for bishop in bishops:
     if bishop.findChildren('a'):
         bishops_with_links[bishop.text] = 'https://de.wikipedia.org' + bishop.a.get('href')
     else:
         bishops_with_links[bishop.text] = ''
 return bishops_with_links
...