2015-11-06 137 views
-2

我是Scrapy的新手,我只是好奇爲什麼我的刮刀不工作。這裏是我的代碼:Scrapy xpath不工作

import scrapy 

from tutorial.items import TutorialItem 

class tutSpider(scrapy.Spider): 
    name = "tutorial" 
    allowed_domains = ["backpage.com"] 
    start_urls = [ 
     "http://chicago.backpage.com/FemaleEscorts/naughtiest-_girl-next-door/20557457" 
    ] 

    def parse(self, response): 
     # sel = response.xpath('//*') 
     item = TutorialItem() 
     item['title'] = response.xpath('//div[@id="postingTitle"]/h1/text()').extract() 
     item['link'] = response.xpath('a/@href').extract() 
     item['desc'] = response.xpath('//body/div[@id="postingBody"]/text()').extract() 
     yield item 

它產生以下JSON文件:

[{"title": [], "link": [], "desc": []}] 

我相信,這是無法找到我表示指定的元素,即使我」 m 100%確定這些div ID是有效的。他們在身體內的其他divs內。

+0

我投票結束這個問題作爲題外話,因爲這基本上說**我xpath不工作,但我知道這是正確的**。任何人都可以在沒有DOM的情況下回答這個問題,因爲每個DOM和xPath都會有所不同,所以這是非常本地化的,所以任何人都會遇到類似的問題,這對於任何人來說都是無用的。也不要使用不相關的標籤來垃圾郵件。這是不是特定於python,如果它實際上是不好的xPath查詢。 –

+0

有大量的在線xPath站點會爲您爲給定的URL的內容實際編寫xPath。 –

回答

0

正如你所猜測的,問題在於xpath本身。

對於item['title'],h1節點位於您使用的xpath中不存在的節點內。所以它必須是

item['title'] = response.xpath('//div[@id="postingTitle"]/a/h1/text()').extract() 
item['link'] = response.xpath('//div[@id="postingBody"]/a/@href').extract() 
item['desc'] = response.xpath('//div[@id="postingBody"]//text()').extract() 

由於@Jarrod羅伯遜所指出的那樣,有很多提供的XPath和驗證他們

如果你使用Firefox和Firebug的工具,嘗試firepath。它總是很好的嘗試xpaths之前把它們放入你的蜘蛛