在python中使用XPath从表中获取信息的更好方法?

时间:2015-02-25 17:04:59

标签: python html dom xpath

如果你看一下这个网站:http://gbgfotboll.se/serier/?scr=table&ftid=57109

第二个表格信息是我需要的。

我现在在做什么:

我正在浏览 Tid 列中的每个单元格以匹配特定日期。如果它匹配则继续从该行提取其他相关数据。代码如下:

rows_xpath = XPath("//*[@id='content-primary']/table[2]/tbody/tr[td[1]/span/span//text()='%s']" % (date))

time_xpath = XPath("td[1]/span/span//text()[2]")
team_xpath = XPath("td[2]/a/text()")

html = lxml.html.parse(url)
league_xpath = XPath("//*[@id='content-primary']/h1//text()")

divName = league_xpath(html)[0]

trash, divisionName = divName.rsplit("- ")

dict[divisionName] = {}

for i,row in enumerate(rows_xpath(html)):
    .... doing some stuff here

问题: 随着时间的推移,另一个表将被插入到网页中,这意味着 rows_xpath 将无效,因为需要将其更改为:

rows_xpath = XPath("//*[@id='content-primary']/table[3]/tbody/tr[td[1]/span/span//text()='%s']" % (date))

更改的是表[x],其中x是要更改的数字。

是否有智能解决方案来解决这个问题,甚至是以更安全的方式获取所需信息的更好方法,而不依赖于XPath?我感谢所有帮助!

1 个答案:

答案 0 :(得分:0)

如果您只是在所有表中查找唯一的日期值,则不必指定table元素编号。

rows_xpath = XPath("//*[@id='content-primary']/table/tbody/tr[td[1]/span/span//text()='%s']" % (date))

这将返回具有该日期值的行的集合,但是可能存在许多表。但是,如果您要在特定表上查找日期,则可能必须先选择带有xpath的表(假设您可以使用某些唯一值),然后在该表中使用xpath。