2016-05-02 15 views
0

Ich versuche, nächste Seite Links mit crawlspider zu crawlen, aber ich bin nicht in der Lage, jedes Ergebnis zu erhalten, wenn ich Parse-Funktion zu etwas anderem ändern. Meine Regel funktioniert nicht. Ich kann nur die aktuelle Seite mit der Parse-Funktion abrufen. Wo gehe ich falsch vor?Scrapy crawlspider rule funktioniert nicht für die nächsten Seiten

Das ist meine naukri_spider.py Datei

import scrapy 

from scrapy import Spider 
from scrapy.contrib.spiders import CrawlSpider, Rule 
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor 
from naukri.items import NaukriItem 

class NaukriSpider(Spider): 
    name = "naukri" 
    allowed_domains = ["naukri.com"] 
    start_urls = ["http://www.naukri.com/information-technology-jobs?xt=catsrch&qf[]=24"] 

    rules = (
    Rule(SgmlLinkExtractor(allow=(), restrict_xpaths=('//div[@class="pagination"]/a/button[@class="grayBtn"]',)), callback="parse", follow= True), 
) 

    def parse(self,response): 
     for sel in response.xpath('//*[@class="content"]'): 
      item = NaukriItem() 
      item['title'] = sel.xpath('span[@class="desig"]/text()').extract() 
      item['location'] = sel.xpath('span[@class="loc"]/span/text()').extract() 
      item['organization'] = sel.xpath('span[@class="org"]/text()').extract() 
      yield item 
+0

Kontrolle der 'warning': http://doc.scrapy.org/en/latest/topics/spiders.html#crawling-rules – eLRuLL

Antwort

0

Die parse Methode implemeted von CrawlSpider verwendete Links zu folgen. Ändern Sie Ihren Regelrückruf zu parse_start_url und überschreiben Sie es.

Dieser Code funktioniert einwandfrei.

import scrapy 

from scrapy import Spider 
from scrapy.contrib.spiders import CrawlSpider, Rule 
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor 
from stackoverflow.items import NaukriItem 

class NaukriSpider(CrawlSpider): 
    name = "naukri" 
    allowed_domains = ["naukri.com"] 
    start_urls = ["http://www.naukri.com/information-technology-jobs?xt=catsrch&qf[]=24"] 

    rules = (
     Rule(SgmlLinkExtractor(allow=('information-technology-jobs.*',)), callback="parse_start_url", follow= True), 
    ) 

    def parse_start_url(self,response): 
     for sel in response.xpath('//*[@class="content"]'): 
      item = NaukriItem() 
      item['title'] = sel.xpath('span[@class="desig"]/text()').extract() 
      item['location'] = sel.xpath('span[@class="loc"]/span/text()').extract() 
      item['organization'] = sel.xpath('span[@class="org"]/text()').extract() 
      yield item 
+0

Danke, das funktioniert – user6275124

Verwandte Themen