2012-02-14 49 views
0

我的網站麻煩從XPath的入門文本在python

http://www.baseball-reference.com/players/event_hr.cgi?id=bondsba01&t=b

,並試圖刮掉從表中的數據上。當我拉的XPath從一個條目,說投手 「特里穆赫蘭,」我檢索此:

pitchers = site.xpath("/html/body/div[2]/div[2]/div[6]/table/tbody/tr/td[3]/table/tbody/tr[2]/td/a) 

當我嘗試打印pitcher[0].text用於打印機的投手,我得到[]而非text,任何想法爲什麼?

+0

html不是xml。使用BeautifulSoup解析html。 – 2012-02-14 04:01:57

+0

FUD。 lxml適用於解析HTML,xpath適用於HTML dom導航。 – 2012-02-14 04:29:40

+0

因此,lxml.html包。 – 2012-02-14 04:30:04

回答

1

問題是,最後的tbody不存在於原始來源中。如果您通過某個瀏覽器獲取該xpath,請記住瀏覽器可以猜測並添加缺少的元素以使html有效。

刪除最後的tbody可以解決問題。

In : import lxml.html as html 

In : site = html.parse("http://www.baseball-reference.com/players/event_hr.cgi?id=bondsba01&t=b") 

In : pitchers = site.xpath("/html/body/div[2]/div[2]/div[6]/table/tbody/tr/td[3]/table/tr[2]/td/a") 

In : pitchers[0].text 
Out: 'Terry Mulholland' 

但我需要補充一點,你使用的xpath表達式非常脆弱。一個div添加在一些方便的地方,現在你有一個破損的腳本。如果可能,請嘗試找到指向您預期位置的更好參考,如idclass

+0

非常感謝,這非常有幫助。你怎麼知道這個tbody不在原始來源?只要看看DOM? – user1082471 2012-02-14 16:29:47

+0

@ user1082471:一種有經驗的猜測。然後我從DOM中確認它。雖然我很驚訝地看到源頭中的第一個「tbody」:)。在大多數情況下,你通常不會看到「tbody」。 – Avaris 2012-02-15 18:58:54