2011-06-21 60 views
1

我正尝试使用Python和BeautifulSoup访问特定td标签中的内容。我可以得到满足条件的第一个td标签(使用find),或者全部使用findAll。使用Python和BeautifulSoup解析表格

现在,我可以使用findAll,全部获取并获取我想要的内容,但这似乎效率低下(即使我对搜索设置了限制)。无论如何去符合我想要的标准的某个td标签?说第三个,还是第十个?

这里是我到目前为止的代码:

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) 

回答

1

findfindAll非常灵活,在BeautifulSoup.findAll文档说

5。您可以传入一个可调用对象 ,该对象只需将一个Tag对象作为其唯一的 a参数,并返回一个布尔值。每个 查找所有遇到的标记对象 将被传递到此对象中,并且如果调用返回True,则 则认为标记 被认为匹配。

+0

Hrm,这可能会让我做我需要做的事情。下班后我会做一些测试。 –

+0

我唯一发现的问题是,它是具有相同信息的相同标签。除非有能力检查一个孩子,也许。 –

+0

是的,它是相同的标签,但您可以在决定是否返回true或false之前检查子标签,从而为您提供所需的所有标签。 – cerberos

2

反正是有去有一定的TD 标签会议上,我想要的标准是什么?说第三,还是第十? ?

嗯......

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

print all_tds[3] 

...有没有其他办法..

+0

叹了口气,这就是我的想法 - 我希望我错了!甚至没有使用find的方法?我只希望有一种方法可以找到标签的特定实例。 –

+0

all_tds = [td for td在td = soup.findAll(“td”,{'class':'yfnc_tablehead1'})] 此外,该行不起作用。 –

+0

嗯,固定 - 你应该能够自己发现和修复一个错误....盲目复制和粘贴代码不是一个好主意,不会想到你在做什么 –