2017-08-25 15 views
0

私はクレイグズリストから住宅データを取得するには、このクローラを構築しようとしていますが、クロールではないが、クローラーは、最初のページをフェッチした後に停止し、次のページに移動しません。ここで Scrapyクローラは、再帰的に</p> <p>、次のページ

は、それが最初のページのために働く、コードではなく、神の愛のために私はそれは.ANY洞察力は本当に.I高く評価され、次のページを取得しない理由を理解しない this part from scrapy tutorial

import scrapy 
import re 

from scrapy.linkextractors import LinkExtractor 




class QuotesSpider(scrapy.Spider): 
    name = "craigslistmm" 
    start_urls = [ 
     "https://vancouver.craigslist.ca/search/hhh" 
    ] 



    def parse_second(self,response): 
     #need all the info in a dict 
     meta_dict = response.meta 
     for q in response.css("section.page-container"): 
      meta_dict["post_details"]= { 
       "location": 
        {"longitude":q.css("div.mapAndAttrs div.mapbox div.viewposting::attr(data-longitude)").extract(), 
       "latitude":q.css("div.mapAndAttrs div.mapbox div.viewposting::attr(data-latitude)").extract()}, 

       "detailed_info": ' '.join(q.css('section#postingbody::text').extract()).strip() 

      } 


     return meta_dict 





    def parse(self, response): 
     pattern = re.compile("\/([a-z]+)\/([a-z]+)\/.+") 
     for q in response.css("li.result-row"): 

      post_urls = q.css("p.result-info a::attr(href)").extract_first() 
      mm = re.match(pattern, post_urls) 

      neighborhood= q.css("p.result-info span.result-meta span.result-hood::text").extract_first() 




      next_url = "https://vancouver.craigslist.ca/"+ post_urls 
      request = scrapy.Request(next_url,callback=self.parse_second) 
      #next_page = response.xpath('.//a[@class="button next"]/@href').extract_first() 
      #follow_url = "https://vancouver.craigslist.ca/" + next_page 
      #request1 = scrapy.Request(follow_url,callback=self.parse) 
      #yield response.follow(next_page,callback = self.parse) 


      request.meta['id'] = q.css("li.result-row::attr(data-pid)").extract_first() 
      request.meta['pricevaluation'] = q.css("p.result-info span.result-meta span.result-price::text").extract_first() 
      request.meta["information"] = q.css("p.result-info span.result-meta span.housing::text").extract_first() 
      request.meta["neighborhood"] =q.css("p.result-info span.result-meta span.result-hood::text").extract_first() 
      request.meta["area"] = mm.group(1) 
      request.meta["adtype"] = mm.group(2) 


      yield request 
      #yield scrapy.Request(follow_url, callback=self.parse) 

     next_page = LinkExtractor(allow="s=\d+").extract_links(response)[0] 


     # = "https://vancouver.craigslist.ca/" + next_page 
     yield response.follow(next_page.url,callback=self.parse) 

答えて

0
を追いました

LinkExtractorを使用しているnext_page抽出の問題があるようです。外観を見ると、重複しているリクエストがフィルタリングされていることがわかります。あなたの抽出ルールを満たすページ上のリンクが多くあり、特定の順序で抽出されない場合もあれば、望む順序で抽出されない場合もあります。

私はより良いアプローチはこれでそれを試して、あなたが欲しい情報を正確に抽出することであると思う:

next_page = response.xpath('//span[@class="buttons"]//a[contains(., "next")]/@href').extract_first() 
+0

これによってフェッチされる唯一のリンクがある、私はにnext_pageを構築するための差分の方法を試してみましたあなたの言葉に似ていますが、うまくいかなかったのです。 – Bg1850

+0

しかし、もう一度私はあなたのsolnと更新を試してみる – Bg1850

+0

それは私のIPがブロックされたまで少なくとも私のために働いていた.. :-)) –

関連する問題