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

Better way of getting information from a table using XPath in python?

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

第二个table信息正是我需要的

我现在在做什么:

我将遍历 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

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

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

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

是否有解决此问题的智能解决方案,或者是否有更好的方法以不依赖于 XPath 的更安全的方式获取我需要的信息?我感谢我能得到的所有帮助!

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

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

这将 return 具有该日期值的行的集合,但可能有很多 table。但是,如果您要查找特定 table 上的日期,您可能必须先使用 xpath select table(假设您可以使用一些唯一值),然后在 table.

中使用 xpath