2017-07-01 1 views
0

Je suis nouveau à scrapy, j'ai été capable de créer quelques araignées jusqu'ici. Je voudrais écrire une araignée qui va explorer Yellowpages, à la recherche de sites Web qui ont une réponse 404, l'araignée fonctionne bien, cependant, la pagination ne fonctionne pas. Toute aide sera très appréciée. merci à l'avanceBesoin d'aide avec YellowPages spider

# -*- coding: utf-8 -*- 
import scrapy 


class SpiderSpider(scrapy.Spider): 
    name = 'spider' 
    #allowed_domains = ['www.yellowpages.com'] 
    start_urls = ['https://www.yellowpages.com/search?search_terms=handyman&geo_location_terms=Miami%2C+FL'] 

    def parse(self, response): 
    for listing in response.css('div.search-results.organic div.srp-listing'): 

     url = listing.css('a.track-visit-website::attr(href)').extract_first() 

     yield scrapy.Request(url=url, callback=self.parse_details) 


    # follow pagination links 

    next_page_url = response.css('a.next.ajax-page::attr(href)').extract_first() 
    next_page_url = response.urljoin(next_page_url) 
    if next_page_url: 
     yield scrapy.Request(url=next_page_url, callback=self.parse) 

    def parse_details(self,response): 
    yield{'Response': response,} 
+0

Salut David, c'est la première fois de poster ici et que je rencontrais des problèmes formatage du code. Ma question est très simple J'ai des problèmes avec la pagination de cette araignée. Et je ne sais pas ce que je manque ici – oscarQ

Répondre

1

J'ai couru votre code et a découvert qu'il ya des erreurs. Dans la première boucle , vous ne vérifiez pas la valeur de url et parfois il est None. Cette erreur arrête l'exécution, c'est pourquoi vous pensiez que la pagination ne fonctionnait pas.

Voici un code de travail:

# -*- coding: utf-8 -*- 
import scrapy 


class SpiderSpider(scrapy.Spider): 
    name = 'spider' 
    #allowed_domains = ['www.yellowpages.com'] 
    start_urls = ['https://www.yellowpages.com/search?search_terms=handyman&geo_location_terms=Miami%2C+FL'] 

    def parse(self, response): 
     for listing in response.css('div.search-results.organic div.srp-listing'): 
      url = listing.css('a.track-visit-website::attr(href)').extract_first() 
      if url: 
       yield scrapy.Request(url=url, callback=self.parse_details) 
     next_page_url = response.css('a.next.ajax-page::attr(href)').extract_first() 
     next_page_url = response.urljoin(next_page_url) 
     if next_page_url: 
      yield scrapy.Request(url=next_page_url, callback=self.parse) 

    def parse_details(self,response): 
     yield{'Response': response,} 
+0

Merci beaucoup, vous êtes génial !!!! – oscarQ

+0

Pas de problème, si cela a résolu votre problème, n'hésitez pas à valider la réponse. –