【问题标题】:XPath expression returning empty list in scrapy [duplicate]XPath表达式在scrapy中返回空列表[重复]
【发布时间】:2017-10-27 00:10:59
【问题描述】:

我在刮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 工作。

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 啊!谢谢。我想出了一个解决方法,但不知道为什么我不能。
    【解决方案2】:

    正如安德森所说,只需删除 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()
    

    【讨论】:

    • 这也有效。谢谢。
    猜你喜欢
    • 2021-11-24
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 2017-03-06
    • 2018-02-27
    相关资源
    最近更新 更多