2017-05-26 184 views
1

我刮http://stats.espncricinfo.com/ci/engine/records/index.html?id=2;type=teamXPath表达式中scrapy返回空列表

我确实需要连接到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 

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

回答

2

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

您可以使用链接文本确切元素匹配:

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

啊!谢谢。我想出了一个解决方法,但不知道为什么我不能。 – Vishnu

0

只是删除所有<tbody>在你的XPath表达式的安德森在说什么。下面的表达式给我一个只有这个元素的列表(如你想要的):

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() 
+0

这也适用。谢谢。 – Vishnu