Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当';时,lxml xpath path/text()无法返回值';是以刮痧的形式出现的_Xpath_Text_Scrapy_Lxml - Fatal编程技术网

当';时,lxml xpath path/text()无法返回值';是以刮痧的形式出现的

当';时,lxml xpath path/text()无法返回值';是以刮痧的形式出现的,xpath,text,scrapy,lxml,Xpath,Text,Scrapy,Lxml,当您尝试使用text()函数返回不包含“.”字符的内容时,scrapy中的lxml模块可以正常工作,但是当它们包含“.”字符时,例如“11.14”,查询将返回“-”。如何解决这个问题 这是我的密码: stock_price = hxs.xpath('//td[@id="gt1"]//text()').extract() 目标html如下所示: <td id="gt1" class="txtl green">11.14</td> 而不是 '11.14' 为什么??源U

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

这是我的密码:

stock_price = hxs.xpath('//td[@id="gt1"]//text()').extract()
目标html如下所示:

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

'11.14'
为什么??源URL为


尝试使用其他数据源,只要文本字段包含“”,它将返回“-”,否则一切正常。这是环境的问题吗?

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

问题可能出现了,因为您同时使用了//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);

源HTML和URL是什么?@paultrmbrth补充道。为什么你用
//text()
而不是
/text()
?@JonClements我已经尝试了这两种方法,感谢你的帮助没有什么不同,但我用python来做,而且还没有使用chromedriver。我将尝试使用selenium的webdriver,或者看看是否有任何方法可以从javascript获取结果。这是完全正确的!你更喜欢使用splash还是webdriver来提取信息?@RockyLi我更喜欢splash而不是Selenium和其他工具。我通过
Scrapy splash
软件包与Scrapy无缝集成,根据我的经验,它比其他工具更可靠。
    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);