XPath表达式在scrapy中返回空列表

时间:2017-05-26 07:17:54

标签: python-3.x xpath web-scraping scrapy

我在抓http://stats.espncricinfo.com/ci/engine/records/index.html?id=2;type=team

我需要的是附加到XPath表达式的链接

/html/body/div[1]/div[3]/div[4]/table/tbody/tr/td[1]/div[2]/table[1]/tbody/tr/td/ul[2]/li/a[2]

在页面中,它是按年份匹配结果列表下的"One-day Internationals"标记的元素。上面的表达式是使用Firefox扩展Firebug获得的。

然而它返回一个空列表。尝试使用像

这样的备用xpath表达式
//div[@id="ciHomeContentlhs"]/table/tbody/tr/td[1]/div/table[2]/tbody/tr/td/ul/li/a[2]/@href

具有相同的结果。

Xpath表达式

//div[@id="ciHomeContentlhs"]/table

给了我这张桌子。但是

//div[@id="ciHomeContentlhs"]/table/tbody

返回一个空列表。我已经测试了xpath表达式 http://videlibri.sourceforge.net/cgi-bin/xidelcgi并显示所需的href或节点作为输出。我似乎无法在Python开始工作。

2 个答案:

答案 0 :(得分:3)

<tbody>元素不是初始HTML源的一部分 - 它是由浏览器解析器生成的,因此您不应在XPath表达式中使用它。

您可以使用链接文字来匹配确切的元素:

//a[text()="One-Day Internationals"]

答案 1 :(得分:1)

按照Andersson的说法,删除Xpath表达式中的所有<tbody>。下面的表达式给了我一个只有这个元素的列表(如你所愿):

response.xpath('/html/body/div[1]/div[3]/div[4]/table/tr/td[1]/div[2]/table[1]/tr/td/ul[2]/li/a[2]/text()').extract()