gpt4 book ai didi

python - 按顺序从 HTML 中提取数据

转载 作者:行者123 更新时间:2023-12-01 09:34:06 26 4
gpt4 key购买 nike

如何从维基百科页面中提取所有表格内容和前面的数据,例如 https://en.wikipedia.org/wiki/List_of_birds_of_Trinidad_and_Tobago其中数据采用这种重复格式,

 <p>
<b>
Order
</b>
:
<a class="mw-redirect" href="/wiki/Passeriformes" title="Passeriformes">
Passeriformes
</a>
<span class="nowrap">
</span>
<b>
Family
</b>
:
<a class="mw-redirect" href="/wiki/Passeridae" title="Passeridae">
Passeridae
</a>
</p>
<p>
<a href="/wiki/Sparrow" title="Sparrow">
Sparrows
</a>
are small passerine birds ...
</p>
<table class="wikitable" width="72%">
<tr>
<th width="24%">
Common name
</th>
<th width="24%">
Binomial
</th>
<th width="24%">
Status
</th>
</tr>
<tr>
<td>
<a href="/wiki/House_sparrow" title="House sparrow">
House sparrow
</a>
</td>
<td>
<i>
Passer domesticus
</i>
</td>
<td>
Trinidad only - Introduced species
</td>
</tr>
</table>

所需的输出格式是,

顺序、系列、描述、名称、二项式、状态。

最佳答案

方法:

所有想要的标签都是彼此的同级标签。所以,基本上,你必须使用 find_next_sibling() 函数来找到它们。

说明:

所有鸟类类型的名称(标题)都位于 <h2> 内标签。但是,第一个<h2>标签为Contents (所以跳过那个)。 订单家庭位于 <p><h2> 之后的标签标签。您可以使用 h2.find_next_sibling('p') 找到它。可以使用 h2.find_next_sibling('table') 找到包含名称二项式状态的表。 .

使用这一切,您可以打印您想要的所有详细信息。但是,当到达 <h2> 时,您必须打破循环。包含引用的标签。这可以使用

来完成
if h2.find('span', class_='mw-headline').text == 'References':
break

代码:

r = requests.get('https://en.wikipedia.org/wiki/List_of_birds_of_Trinidad_and_Tobago')
soup = BeautifulSoup(r.text, 'lxml')

for bird in soup.find_all('h2')[1:]:
title = bird.find('span', class_='mw-headline').text
if title == 'References':
break
print(title)
p_tag = bird.find_next_sibling('p')
order, family = [x.text for x in p_tag.find_all('a')]
table = p_tag.find_next_sibling('table')
for row in table.find_all('tr')[1:]:
name, binomial, status = [x.text for x in row.find_all('td')]
print(order, family, name, binomial, status, sep=' | ')
print()

部分输出:

Tinamous
Tinamiformes | Tinamidae | Little tinamou | Crypturellus soui | Trinidad only

Screamers
Anseriformes | Anhimidae | Horned screamer | Anhima cornuta | Trinidad only - rare/accidental

Ducks, geese, and waterfowl
Anseriformes | Anatidae | Fulvous whistling-duck | Dendrocygna bicolor | Trinidad only
Anseriformes | Anatidae | White-faced whistling-duck | Dendrocygna viduata | Trinidad only - rare/accidental
...

...
Waxbills and allies
Passeriformes | Estrildidae | Common waxbill | Estrilda astrild | Trinidad, accidental Tobago - introduced species
Passeriformes | Estrildidae | Tricolored munia | Lonchura malacca | Trinidad only - introduced species

Old World sparrows
Passeriformes | Passeridae | House sparrow | Passer domesticus | Trinidad only - Introduced species

关于python - 按顺序从 HTML 中提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49683200/

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