使用Python和BeautifulSoup解析表格

1 投票
2 回答
1233 浏览
提问于 2025-04-16 19:58

我正在用Python和BeautifulSoup来访问某些标签里的内容。我可以用find方法找到第一个符合条件的标签,或者用findAll方法找到所有符合条件的标签。

现在,我可以直接用findAll把所有标签都找出来,然后从中提取我想要的内容,但这样似乎效率不高(即使我对搜索设置了限制)。有没有办法直接定位到我想要的特定标签,比如第三个或第十个?

这是我目前的代码:

from __future__ import division
from __future__ import unicode_literals
from __future__ import print_function
from mechanize import Browser
from BeautifulSoup import BeautifulSoup

br = Browser()
url = "http://finance.yahoo.com/q/ks?s=goog+Key+Statistics"
page = br.open(url)
html = page.read()
soup = BeautifulSoup(html)
td = soup.findAll("td", {'class': 'yfnc_tablehead1'})

for x in range(len(td)):
    var1 = td[x]
    var2 = var1.contents[0]
    print(var2)

2 个回答

2

有没有办法直接找到一个特定的标签,比如说第三个或者第十个?

嗯……

all_tds = [td for td in soup.findAll("td", {'class': 'yfnc_tablehead1'})]

print all_tds[3]

…其实没有其他办法……

1

findfindAll 是非常灵活的,BeautifulSoup.findAll 的文档中提到:

5. 你可以传入一个可调用的对象,这个对象只需要一个参数,也就是一个标签(Tag)对象,并且返回一个布尔值(True 或 False)。每一个被 findAll 遇到的标签对象都会被传入这个对象,如果返回的是 True,那么这个标签就被认为是匹配的。

撰写回答