2017-08-03 54 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獲取結果的方法。 –