gpt4 book ai didi

python - 使用 beautifulsoup 以正确的顺序解析项目符号列表

转载 作者:太空宇宙 更新时间:2023-11-03 18:12:50 25 4
gpt4 key购买 nike

我正在尝试解析一个结构与此非常相似的网站:

<div class="InternaTesto">
<p class="MarginTop0">Paragraph 1</p><br>
<p>Paragraph 2</p><br>
<p><strong>Paragraph 3</strong></p><br>
<ul>
<li style="margin: 0px; text-indent: 0px;"><em>List item 1</em></li>
<li style="margin: 0px; text-indent: 0px;"><em>List item 2</em></li>
<li style="margin: 0px; text-indent: 0px;"><em>List item 3</em></li>
... Some Other Items ...
</ul>
<p><strong>Paragraph 4</strong></p><br>
<ul>
<li style="margin: 0px; text-indent: 0px;"><em>List item 1</em></li>
<li style="margin: 0px; text-indent: 0px;"><em>List item 2</em></li>
<li style="margin: 0px; text-indent: 0px;"><em>List item 3</em></li>
... Some Other Items ...
</ul>
... Some Other paragraphs ...
</div>

我正在尝试提取列表项,并将它们放在正确的段落下。现在我可以找到列表项,但顺序不正确。这是我正在使用的代码:

textOfTheArticle=[] 

for p in rawArticleData.find('div', attrs={'class':'InternaTesto'}).find_all("p"):
textOfTheArticle.append(p.get_text())
print(p.get_text() + "\n")

有没有办法创建一个包含所有<li>的子列表或单独的列表元素?

最佳答案

您可以找到所有段落,并为每个段落找到下一个第三个兄弟:

from bs4 import BeautifulSoup

data = """
Your html here
"""

soup = BeautifulSoup(data)
for p in soup.find('div', attrs={'class':'InternaTesto'}).find_all("p"):
print p.text, [li.text for li in list(p.next_siblings)[2].find_all('li')]

打印:

Paragraph 1 []
Paragraph 2 []
Paragraph 3 [u'List item 1', u'List item 2', u'List item 3']
Paragraph 4 [u'List item 1', u'List item 2', u'List item 3']
<小时/>

更可靠的方法是迭代每个段落的下一个同级,直到我们点击下一个段落标记:

soup = BeautifulSoup(data)
for p in soup.find('div', attrs={'class':'InternaTesto'}).find_all("p"):
print p.text
for sibling in p.next_siblings:
if sibling.name == 'ul':
print [li.text for li in sibling.find_all('li')]
if sibling.name == 'p':
break

希望有帮助。

关于python - 使用 beautifulsoup 以正确的顺序解析项目符号列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25557604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com