【问题标题】:lxml xpath path/text() cannot return value when '.' is present in scrapy当“。”时,lxml xpath path/text() 无法返回值存在于scrapy中
【发布时间】:2018-01-10 22:51:39
【问题描述】:

当您尝试返回不包含 '.' 的内容时,scrapy 中的 lxml 模块可以正常工作使用 text() 函数的字符,但是当它们包含 '.'例如“11.14”,查询返回“-”。如何解决?

这是我的代码:

stock_price = hxs.xpath('//td[@id="gt1"]//text()').extract()

目标 html 如下所示:

<td id="gt1" class="txtl green">11.14</td>

只有一个gt1,它总是返回

'-'

而不是

'11.14'

为什么?来源网址为http://quote.eastmoney.com/sz000001.html

尝试了其他几个数据源,只要文本字段包含'.',它就会返回'-',否则一切正常。这是环境问题吗?

【问题讨论】:

  • 源 HTML 和 URL 是什么?
  • @paultrmbrth 添加。
  • 为什么你有//text()而不是/text()
  • @JonClements 两个都试过了,没区别

标签: xpath text scrapy lxml


【解决方案1】:

问题可能是因为您同时使用 //text() 和 extract()。

下面的代码在 java 中对我来说很好用。如下更改您的 xpath

    driver.get("http://quote.eastmoney.com/sz000001.html");
    System.out.println("5");
    String aa=driver.findElement(By.xpath("//td[@id='gt1']")).getText();
    System.out.println(aa);

【讨论】:

  • 感谢您的帮助,但我在 python 中执行此操作,还没有使用 chromedriver。我会尝试使用 selenium 的 webdriver,或者看看是否有任何方法可以从 javascript 中获取结果。
【解决方案2】:

那是因为在页面源代码中,td 标记内实际上有'-'。您在浏览器中看到的以及使用开发人员工具可以看到的最终结果可能是由某些 JavaScript 提供的。所以你可以使用例如Splash 以呈现页面并从响应中提取,或者如果页面不使用某些 API,则尝试探索页面。当我在 XHR 请求中查看 Chrome 中的开发人员工具时,我可以看到一些调用。

【讨论】:

  • 这完全正确!您更喜欢使用 splash 还是 webdriver 可以提取信息?
  • @RockyLi 我更喜欢 Splash 而不是 Selenium 和其他工具。我通过scrapy-splash 包与 Scrapy 无缝集成,根据我的经验,它比其他工具更可靠。
猜你喜欢
  • 2017-03-21
  • 1970-01-01
  • 2021-11-24
  • 1970-01-01
  • 2023-03-24
  • 2018-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多