2011-06-21 59 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

嗯,固定 - 你應該能夠自己發現和修復一個錯誤....盲目複製和粘貼代碼不是一個好主意,不會想到你在做什麼 –