2016-03-20 12 views
2

this pageの記事を削りました。しかし、ページをスクロールするとAjax経由でロードされます。今まで私はこれを成功させるPOSTリクエストをシミュレートしようとしていました。ここに私の問題を記述するコードのスニペットがあります。ウェブページの読み込みに遅延があります

import scrapy 
class eroskiSpider(scrapy.Spider): 
    name = "eroski" 
    allowed_domains = ['https://www.compraonline.com'] 
    start_urls = [ 
     'https://www.compraonline.grupoeroski.com/es/' 
    ] 
    counter = 0 
    def parse(self, response): 

     for sel in response.xpath('//nav[@class="navmenu"]/ul/li/div/ul/li'): 

      cat_title = sel.xpath('a/@title')[0].extract() 
      href = sel.xpath('a/@href')[0].extract() 
      url = response.urljoin(href) 

      print 'Parsing category ' + cat_title 
      yield scrapy.Request(url, callback = self.parse_cat, dont_filter = True) 
      break 

    def parse_cat(self, response): 

     category = response.xpath('//head/title/text()').extract_first() 
     counter = 0 
     for sel in response.xpath('//article'): 

      counter = counter + 1 
      print 'counter is ' + str(counter) 

      description = sel.xpath('.//h2[contains(@class, "description_title")]/a/@title').extract_first() 
      print description 

     payload = {'pageNumber': '2', 't:zoneid': 'zoneScroll'} 
     yield scrapy.FormRequest(url = response.url, formdata = payload, dont_filter=True) 

あなたがコードを実行する場合は、ページが最初にロードされたときに表示される同じ20の項目のために永遠にループするかを見ることができます。したがって、FormRequestでさらに記事を読み込むという私の意図は間違っています。何が間違っているかについてのアイデア?

+0

どのような治療のバージョンを使用していますか? – gerosalesc

答えて

0

申し訳ありません。ダムの質問。私は明らかにコールバックを使用することを忘れていました。

yield scrapy.FormRequest(url = response.url, formdata = payload, dont_filter=True, callback = self.parse_cat) 

実際に最初のページ番号の後に2番目のページ番号が表示されます。 Aaaaa私はとてもばかです。

+0

ソリューションを共有してくれてありがとう、それは知性の最初の重要な兆候です;) – gerosalesc

関連する問題