2017-08-03 52 views
0

scrapy中的lxml模块在您尝试返回不包含'。'的内容时工作正常。字符使用text()函数,但是当它们包含'。'时如'11.14'查询返回' - '。如何解决这个问题?lxml xpath path/text()无法在'。'后返回值。出现在scrapy中

这里是我的代码:

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

目标HTML看起来像这样:

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

只有一个GT1和它总是返回

'-' 

,而不是

'11.14' 

为什么?源URL是http://quote.eastmoney.com/sz000001.html

尝试与其他数据源,只要文本字段包含'。',它将返回' - ',否则一切都很好。这是环境问题吗?

+0

什么是源HTML和URL? –

+0

@paultrmbrth补充说。 –

+0

为什么你有// text()而不是'/ text()'? –

回答

1

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

+0

这完全正确!你喜欢使用飞溅还是会让网络驱动器工作来提取信息? –

+0

@RockyLi我更喜欢Splash over Selenium和其他工具。我通过'scrapy-splash'软件包与Scrapy无缝集成,从我的经验来看,它比其他工具更可靠。 –

0

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

enter image description here

+0

如果我的建议有帮助。请点击我的答案右侧的正确符号来接受答案。请参阅:https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –

+0

感谢您的帮助,但我在python中执行此操作,但尚未使用chromedriver。我会尝试从硒中使用webdriver,或者查看是否有从JavaScript获取结果的方法。 –