gpt4 book ai didi

python - BeautifulSoup:如何从包含一些嵌套
      列表中提取所有

转载 作者:IT老高 更新时间:2023-10-28 20:33:59 25 4
gpt4 key购买 nike

我是一名新手程序员,试图通过构建一个抓取 http://en.wikipedia.org/wiki/2000s_in_film 的脚本来进入 Python。并提取“电影标题(年份)”列表。我的 HTML 源代码如下所示:

<h3>Header3 (Start here)</h3>
<ul>
<li>List items</li>
<li>Etc...</li>
</ul>
<h3>Header 3</h3>
<ul>
<li>List items</li>
<ul>
<li>Nested list items</li>
<li>Nested list items</li></ul>
<li>List items</li>
</ul>
<h2>Header 2 (end here)</h2>

我想要所有 li 标记在第一个 h3 标记之后并在下一个 h2 标记处停止,包括所有嵌套的 li 标签。

firstH3 = soup.find('h3')

...正确地找到了我想开始的地方。

firstH3 = soup.find('h3') # Start here
uls = []
for nextSibling in firstH3.findNextSiblings():
if nextSibling.name == 'h2':
break
if nextSibling.name == 'ul':
uls.append(nextSibling)

...给我一个列表 uls,每个列表都有我需要的 li 内容。

uls 列表摘录:

<ul>
...
<li><i><a href="/wiki/Agent_Cody_Banks" title="Agent Cody Banks">Agent Cody Banks</a></i> (2003)</li>
<li><i><a href="/wiki/Agent_Cody_Banks_2:_Destination_London" title="Agent Cody Banks 2: Destination London">Agent Cody Banks 2: Destination London</a></i> (2004)</li>
<li>Air Bud series:
<ul>
<li><i><a href="/wiki/Air_Bud:_World_Pup" title="Air Bud: World Pup">Air Bud: World Pup</a></i> (2000)</li>
<li><i><a href="/wiki/Air_Bud:_Seventh_Inning_Fetch" title="Air Bud: Seventh Inning Fetch">Air Bud: Seventh Inning Fetch</a></i> (2002)</li>
<li><i><a href="/wiki/Air_Bud:_Spikes_Back" title="Air Bud: Spikes Back">Air Bud: Spikes Back</a></i> (2003)</li>
<li><i><a href="/wiki/Air_Buddies" title="Air Buddies">Air Buddies</a></i> (2006)</li>
</ul>
</li>
<li><i><a href="/wiki/Akeelah_and_the_Bee" title="Akeelah and the Bee">Akeelah and the Bee</a></i> (2006)</li>
...
</ul>

但我不确定从这里去哪里。


更新:

最终代码:

lis = []
for ul in uls:
for li in ul.findAll('li'):
if li.find('ul'):
break
lis.append(li)

for li in lis:
print li.text.encode("utf-8")

if...break 会抛出包含 UL 的 LI,因为嵌套的 LI 现在是重复的。

现在的打印输出是:

  • 102 Dalmatians(2000)
  • 10th & Wolf(2006)
  • 11:14(2006)
  • 12:08 East of Bucharest(2006)
  • 13 Going on 30(2004)
  • 1408(2007)
  • ...

最佳答案

.findAll() 适用于嵌套的 li 元素:

for ul in uls:
for li in ul.findAll('li'):
print(li)

输出:

<li>List items</li>
<li>Etc...</li>
<li>List items</li>
<li>Nested list items</li>
<li>Nested list items</li>
<li>List items</li>

关于python - BeautifulSoup:如何从包含一些嵌套 <ul> 的 <ul> 列表中提取所有 <li>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4362981/

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