2014-02-26 46 views
1

我嘗試提取工作從本網站提供的信息,這是我的代碼驗證scrapy項目代碼

from scrapy.spider import Spider 
from scrapy.selector import Selector 

from tutorial.items import DmozItem 

class DmozSpider(Spider): 
    name = "myspider" 
    allowed_domains =["tanitjobs.com/"] 
    start_urls =["http://tanitjobs.com/search-results-jobs/"] 

    def parse(self, response): 
     sel = Selector(response) 
     sites = sel.xpath('//div[@class="offre"]/div[@class="detail"]') 
     items = [] 
     item = DmozItem() 
     for site in sites: 
      item['title'] = site.xpath('a/text()').extract() 
      item['link'] = site.xpath('a/@href').extract() 
      item['desc'] = site.xpath('div[@class="descriptionjob"]/text()').extract() 
      items.append(item) 
     return items 

但結果是不正確的(空項列表):

{'desc': [], 
    'link': [u'lien'], 
    'title': []} 

和許多塊像這樣...

+0

蜘蛛運行正常我,期待'site.xpath( 'DIV [@類= 「descriptionjob」] /文()')',我建議你使用'site.xpath(」 .// div [@ class =「descriptionjob」]/text()')' –

+0

在我的情況下,它返回相同的項目,向我發送驗證PLZ的代碼; [email protected] – Athari

+0

我第一次錯過了它(我只是在我的測試中打印項目)。問題是與物品實例化,這應該在循環中完成 –

回答

2

item = DmozItem()應該爲每個循環迭代調用,否則你重寫相同的項目,追加相同的項目到items

它應該看起來像:

from scrapy.spider import Spider 
from scrapy.selector import Selector 

from tutorial.items import DmozItem 

class DmozSpider(Spider): 
    name = "myspider" 
    allowed_domains =["tanitjobs.com/"] 
    start_urls =["http://tanitjobs.com/search-results-jobs/"] 

    def parse(self, response): 
     sel = Selector(response) 
     sites = sel.xpath('//div[@class="offre"]/div[@class="detail"]') 
     items = [] 
     for site in sites: 
      item = DmozItem() 
      item['title'] = site.xpath('a/text()').extract() 
      item['link'] = site.xpath('a/@href').extract() 
      item['desc'] = site.xpath('div[@class="descriptionjob"]/text()').extract() 
      items.append(item) 
     return items 
+0

中添加一個'/ strong'step,我發現了一些@Talvalin,感謝我糾正它:) – Athari

+0

如果我想要它返回所有頁面的結果(page1,page2 ,....) 我該怎麼做 ;因爲您可以驗證它返回(已爬網頁= 0) – Athari

+0

閱讀CrawlSpider文檔:http://doc.scrapy.org/en/latest/topics/spiders.html#crawlspider – Talvalin

0

你的標題的XPath沒有考慮到的文本兩側的<strong>代碼並且遞減的XPath需要再往另一個div來檢索要求(提供)的信息。

我只注意到作業描述的xpath各不相同。下面的代碼中的xpath返回前三個結果的作業描述,但不返回後面的結果。您需要檢查後續結果以確定xpath如何更改以檢索這些作業的描述。

def parse(self, response): 
    sel = Selector(response) 
    sites = sel.xpath('//div[@class="offre"]/div[@class="detail"]') 
    items = [] 
    for site in sites: 
     item = DmozItem() 
     item['title'] = site.xpath('normalize-space(a/strong/text())').extract() 
     item['link'] = site.xpath('a/@href').extract() 
     item['desc'] = site.xpath('normalize-space(./div/div[@class="descriptionjob"]/text())').extract() 
     items.append(item) 
    return items