我想用美组找到第N张桌子。到目前为止,这件事一直在为我做着。
table = soup.find_all('table',{'class':'wikitable sortable jquery-tablesorter'})[nth]
但是,如果我确定它是由我定义n的第n个表,有没有办法避免搜索和保存所有以前的表?我觉得如果有一种方法只能得到表,如果它是第n个我的代码将运行得更快。这些表格来自维基百科。

最佳答案

.selectnth-of-type一起使用。我不确定这是否会使您的代码运行得更快,为此请查看文档的improving performance部分。

from bs4 import BeautifulSoup
html="""
<table class="1">
</table>
<table class="2">
</table>
<table class="3">
</table>
<table class="4">
</table>
<table class="5">
</table>
"""
soup=BeautifulSoup(html,'html.parser')
print(soup.select('table:nth-of-type(3)'))

输出
[<table class="3">
</table>]

css选择器似乎不能与BeautifulSoup一起工作。但是如果你知道表的父类,你可以做一些类似.class:nth-of-type(n)
from bs4 import BeautifulSoup
html="""
<div class="parent1">
<table class="tbl">
not our table 1
</table>
<table class="tbl">
not out table 2
</table>
</div>
<div class="parent2">
<table class="tbl">
our table 1
</table>
<table class="tbl">
our table 2
</table>
</div>
"""
soup=BeautifulSoup(html,'html.parser')
print(soup.select('.parent2 table:nth-of-type(2)'))

输出
[<table class="tbl">
our table 2
</table>]

上述输出也可以通过'.parent table:nth-of-type(n)'

关于python - BeautifulSoup,不使用find_all()查找第n个表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54356576/

10-08 21:54