首页 文章

XPath表达式在scrapy中返回空列表[重复]

提问于
浏览
1

这个问题在这里已有答案:

我在刮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

给我一张 table . 然而

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

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

2 回答

  • 2

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

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

    //a[text()="One-Day Internationals"]
    
  • 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()
    

相关问题