Я только что узнал lxmlx в python, и мне нужна помощь, так как у меня нет опыта работы с XPath. Я хочу получить текстовые данные с веб-страницы в словарь.
Я имею в виду фрагмент кода html, который я разместил ниже. На исходной странице html есть элемент div класса general-info
, который я извлекаю, используя следующую строку:
general_info = document_tree.xpath("//div[contains(concat(' ', normalize-space(@class), ' '), 'general-info')]")
С этого момента я хочу перебирать вложенные div
s и получать теги 2 <p>
как ключ и значение. Текст внутри <strong>
является ключом. Также могут быть пустые теги div
, и может быть особый случай, когда ключ и значение словаря могут находиться в одном и том же элементе div (см. Последний элемент).
EDIT:
Количество элементов может изменяться, поэтому было бы лучше использовать теги <strong>
в качестве отправной точки, а затем искать следующий тег <p>
. Это код, который я смог написать с помощью BeautifulSoup:
generalinfo = documentSoup.findAll("div", {"class": "general-info"})
if generalinfo:
strongs = generalinfo[0].find_all('strong')
for descr in strongs:
p = descr.find_next_sibling("p")
if p:
key = descr.text.strip().rstrip(':')
details_dict[key] = p.text.strip()
else:
nextdiv = descr.parent.parent.find_next_sibling("div")
if nextdiv:
child = nextdiv.findChild()
if child:
key = descr.text.strip()[:-1]
details_dict[key] = child.text.strip()
Я собираюсь сделать следующий вывод:
['Title:' : 'This is a title',
'Owner:' : 'This is an owner',
'Category:' : 'This is a categroy',
'Type:' : 'This is a type',
'Special case:' : 'This is a special case']
Если кто-то может помочь мне здесь, я буду признателен!
html код:
<body>
<main>
<div>
...
<div class="general-info margin-bottom-20 margin-top-20">
<div class="row padding-x-20">
<div class="col-sm-4">
<p class="margin-0">
<strong>Title:</strong>
</p>
</div>
<div class="col-sm-8">
<p class="margin-0">This is a title</p>
</div>
</div>
<div class="row padding-x-20">
<div class="col-sm-4">
<p class="margin-0">
<strong>Owner:</strong>
</p>
</div>
<div class="col-sm-8">
<p class="margin-0">This is an owner</p>
</div>
</div>
<h2 class="h3 margin-top-10 margin-bottom-10 padding-x-20">Validity</h2>
<div class="row padding-x-20">
<div class="col-sm-4">
<p class="margin-0">
<strong>Category:</strong>
</p>
</div>
<div class="col-sm-8">
<p class="margin-0">This is a category</p>
</div>
</div>
<div class="row padding-x-40"></div>
<div class="row padding-x-20">
<div class="col-sm-4">
<p class="margin-0">
<strong>Type:</strong>
</p>
</div>
<div class="col-sm-8">
<p class="margin-0">This is a type</p>
</div>
</div>
<div class="row padding-x-40">
<div>
<strong>Special case:</strong>
<p>This is a special case</p>
</div>
</div>
</div>
...