2016-04-22 51 views
0

我正在使用「scrapy shell」來測試xpath。 它看起來像:內容存在,但xpath找不到它,爲什麼?

scrapy shell https://item.taobao.com/item.htm?spm=a219e.1191392.1111.1.FglWUh&id=40978681727&scm=1029.newlist-0.1.50002766&ppath=&sku=&ug=#detail 

中的XPath看起來像:

response.xpath("//a[@class='shop-name-link']") 

結果是沒有,但頁面內容包含

<a class="shop-name-link" href="//shop103857282.taobao.com" target="_blank" 
    data-goldlog-id="/tbwmdd.1.044">長島小兩口創業</a> 

爲什麼?

+0

因爲它不存在。查看鏈接頁面的來源;沒有這樣的「a」元素。創建一個展示問題的[mcve],並在您的問題本身的HTML中包含縮小的部分,以便您的問題可以獨立運行。 – kjhughes

回答

0

如果您在尋找xpaths結果時遇到問題,請使用firepath或Chrome瀏覽器開發工具來調查頁面源代碼。請記住,Scrapy蜘蛛會將頁面源視爲未渲染。它不是用JavaScript呈現的。要查看蜘蛛看到的源代碼,請在禁用JavaScript的瀏覽器中使用firepath。

我看不到在您問題中關聯的頁面中的類shop-name-link的鏈接。因此,要麼不給出正確的鏈接,要麼在某個用戶操作後顯示此元素,或者以不同的方式向不同國家/地區的不同用戶顯示此頁面。也有可能這個頁面依賴於你有的一些cookie的存在,但我們沒有。

有很好的快捷方式:

from scrapy.utils.response import open_in_browser 
open_in_browser(response) 

這將打開在瀏覽器中蜘蛛的反應。當你需要檢查蜘蛛究竟看到什麼時使用它。在許多情況下(如果不是大多數情況下),這與您在瀏覽器中看到的不同。

如果你想分享你可以看到這個頁面的可重複的例子,chrome開發工具有一個有用的功能「copy as curl」,可以將所有標題和cookie的請求複製到剪貼板。如果您將其粘貼到問題中,則人們將能夠看到該頁面(當然,ips上沒有地理位置限制)。

+0

非常感謝! – Wallace

相關問題