【问题标题】:Xpath is correct but Scrapy doesn't workXpath 是正确的,但 Scrapy 不起作用
【发布时间】:2018-07-17 11:00:56
【问题描述】:

我正在尝试从网页下载两个字段,我识别每个字段的 XPath 表达式,然后运行蜘蛛,但没有下载任何内容。

网页: http://www.morningstar.es/es/funds/snapshot/snapshot.aspx?id=F0GBR04MZH

我要逐项列出的字段是ISIN

蜘蛛运行没有错误,但输出为空。

这是行代码:

item['ISIN'] = response.xpath('//*[@id="overviewQuickstatsDiv"]/table/tbody/tr[5]/td[3]/text()').extract()

【问题讨论】:

    标签: python xpath web-scraping scrapy spyder


    【解决方案1】:

    尝试从 XPath 中删除 tbody

    '//*[@id="overviewQuickstatsDiv"]/table//tr[5]/td[3]/text()'
    

    请注意,此标签是您的浏览器在页面呈现时添加的,页面源中不存在此标签

    附:我建议您使用恕我直言甚至更好的 XPath:

    '//td[.="ISIN"]/following-sibling::td[contains(@class, "text")]/text()'
    

    【讨论】:

    • 你知道为什么这不起作用吗? --> item['score'] = response.selector.xpath('//*[@id="mainContentDiv"]/table/tr/td/ec-sustainability/div/div[1]/div[1] /h3/text()').extract()
    • 该元素有一个警告“在控制台中使用$0来引用这个元素”...
    • 我在ec-sustainability 节点中看不到子节点。你到底想要什么输出?
    • 我想在同一行添加一个文本(“Sin Rating”)。我尝试了几件事,但没有任何效果......
    • 只是一个字符串"Sin Rating""- | - " 还是别的什么?
    【解决方案2】:

    我认为 response.selector 没有给出。试试这个。

    response.selector.xpath('//*[@id="overviewQuickstatsDiv"]/table/tbody/tr[5]/td[3]/text()').extract()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-21
      • 1970-01-01
      • 2020-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多