2012-02-14 32 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