2016-03-20 8 views
2

Ich möchte die Artikel von this page kratzen. Die Elemente der Seite werden jedoch über Ajax geladen, wenn ich sie herunterscrolle. Bis jetzt habe ich versucht, die POST-Anfrage zu simulieren, die dies ohne Erfolg erreicht. Hier ist der Codeschnipsel, der mein Problem beschreibt.Probleme laden Webseite träge mit Scrapy

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) 

Wenn Sie den Code ausführen Sie sehen können, wie es für immer für die gleichen 20 Elemente Schleifen, die angezeigt werden, wenn die Seite zum ersten Mal geladen wird. Daher ist meine Absicht, weitere Artikel mit dem FormRequest zu laden, falsch. Irgendwelche Ideen, was falsch ist?

+0

Welche Scrapy-Version verwenden Sie? – gerosalesc

Antwort

0

Entschuldigung. Blöde Frage. Ich habe offensichtlich vergessen, den Rückruf zu verwenden.

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

Jetzt bekommen wir tatsächlich die zweite Seitennummer nach der ersten Seite. Aaaaa Ich bin so dumm.

+0

Danke für das Teilen der Lösung, das ist das erste wichtige Zeichen der Intelligenz;) – gerosalesc