【问题标题】:trouble getting text from xpath entry in python从 python 中的 xpath 条目获取文本时遇到问题
【发布时间】:2012-02-14 03:42:44
【问题描述】:

我在网站上

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

并尝试从表中抓取数据。当我从一个条目中拉出 xpath 时,说投手 “Terry Mulholland,”我检索到这个:

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,知道为什么吗?

【问题讨论】:

  • html 不是 xml。使用 BeautifulSoup 解析 html。
  • FUD。 lxml 适合解析 HTML,xpath 适合 HTML dom 导航。

标签: python xpath screen-scraping lxml


【解决方案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

【讨论】:

  • 非常感谢,这很有帮助。你怎么知道 tbody 不在原始来源中?只看 DOM?
  • @user1082471:从经验中得出的一种有根据的猜测。然后我从 DOM 确认了它。虽然我很惊讶在源代码中看到第一个 tbody :)。您通常不会在大多数来源中看到 tbody
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-05
  • 1970-01-01
  • 1970-01-01
  • 2013-09-27
  • 2021-10-18
  • 2020-07-04
  • 2016-08-24
相关资源
最近更新 更多