2014-02-26 44 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