2016-11-06 1 views
0

Je suis capable d'abandonner la première page de craiglist. Mais Linkextractor ne récupère pas les données des autres pages. Est-ce que je fais quelque chose de mal à définir les règles?Scrapy python Règles ne fonctionnant pas

import scrapy 
from craiglist.items import craiglistItem 
from scrapy.contrib.spiders import CrawlSpider, Rule 
from scrapy.linkextractors import LinkExtractor 


class ExampleSpider(CrawlSpider): 
    name = "craiglist" 
    allowed_domains = ["craiglist.org"] 
    start_urls = (
     'http://sfbay.craigslist.org/search/npo', 
    ) 
    rules = [ 
     Rule(LinkExtractor(restrict_xpaths='//a[@class="button next"]'),  callback='parse', follow= True) 
    ] 

    def parse(self, response): 
     titles = response.selector.xpath('//*[@id="sortable-results"]/ul/li/p') 
     items = [] 
     for title in titles: 
      item = craiglistItem() 
      item["title"] = title.select("a/text()").extract() 
      item["link"] = title.select("a/@href").extract() 
      items.append(item) 
     return items 
+0

votre url de départ est différent de domaines autorisés, peut-être que le problème est – intelis

+0

j'ai mis à jour les domaines autorisés avec http://sfbay.craigslist.org. alors aussi suivre le lien ne se passe pas –

+0

quelle est l'erreur? – intelis

Répondre

0

J'ai modifié le code et maintenant son fonctionnement est correct. Voici le code de travail.

import scrapy 
from craiglist.items import craiglistItem 
from scrapy.contrib.spiders import CrawlSpider, Rule 
from scrapy.linkextractors import LinkExtractor 
from scrapy.http import Request 


class ExampleSpider(CrawlSpider): 
    name = "craiglist" 
    allowed_domains = ["craigslist.org"] 
    start_urls = (
     'http://sfbay.craigslist.org/search/npo', 
    ) 
    rules = [ 
     Rule(LinkExtractor(restrict_xpaths='//a[@class="button next"]'), callback="parse_items", follow= True), 
    ] 

    def parse_start_url(self,response): 
     request=Request("http://sfbay.craigslist.org/search/npo", callback=self.parse_items) 
     return request 

    def parse_items(self, response): 
     titles = response.selector.xpath('//*[@id="sortable-results"]/ul/li/p') 
     items = [] 
     for title in titles: 
      item = craiglistItem() 
      item["title"] = title.select("a/text()").extract() 
      item["link"] = title.select("a/@href").extract() 
      #item["link"] = response.url 
      items.append(item) 
     return items