Scrapy Schrott auf allen Seiten, die diese Syntax haben

Ich möchte auf allen Seiten scrapy, die diese syntaxt haben

mywebsite/?page=INTEGER 

Ich habe das versucht:

 start_urls = ['MyWebsite'] rules = [Rule(SgmlLinkExtractor(allow=['/\?page=\d+']), 'parse')] 

Aber es scheint, dass die Link noch MyWebsite . /?page=NumberOfPage bitte was soll ich tun, um es zu verstehen, dass ich /?page=NumberOfPage hinzufügen /?page=NumberOfPage ? Bitte?

bearbeiten

Ich meine, ich möchte diese Seiten schrotten:

 mywebsite/?page=1 mywebsite/?page=2 mywebsite/?page=3 mywebsite/?page=4 mywebsite/?page=5 .. .. .. mywebsite/?page=7677654 

Mein Code

 start_urls = [ 'http://example.com/?page=%s' % page for page in xrange(1,100000) ] def parse(self, response): sel = Selector(response) sites = sel.xpath('my xpath') for site in sites: DateDifference= site.xpath('xpath for date difference').extract()[0] if DateDifference.days < 8: yield Request(Link, meta={'date': Date}, callback = self.crawl) 

Ich möchte alle Daten von Seiten erhalten, die in den letzten 7 Tagen hinzugefügt wurden. Ich weiß nicht, wie viele Seiten in den letzten 7 Tagen hinzugefügt wurden. So dass ich denke, dass ich auf einer großen Anzahl von Seiten kriechen kann, sagen wir 100000, dann überprüfe ich die datedifference wenn es weniger ist, dass 7 Tage ich will, wenn ich nicht aufhören will, überhaupt zu kriechen.

  • Scrapy: Machen Sie sich anmelden und dann mit dieser Sitzung arbeiten
  • Scrapy Ausgänge [in meine .json Datei
  • Einklemmende Plätzchen in schrott
  • Reguläre Ausdrücke und Zeichencodes in Scrapy-Exportdaten
  • Dokument DOCTYPE mit BeautifulSoup holen
  • Kriechen eine Liste von Seiten eins nach dem anderen mit schrott
  • Wie kann ich kratzig machen, um die URL sequentiell zu verarbeiten
  • Installieren von Scrapy auf Lion - libxml / xmlversion.h nicht verfügbar
  • 2 Solutions collect form web for “Scrapy Schrott auf allen Seiten, die diese Syntax haben”

    Wenn ich es richtig mache, willst du alle Seiten kriechen, die jünger als 7 Tage sind. Eine Möglichkeit, es zu tun, ist, jede Seite in der Reihenfolge zu folgen (vorausgesetzt, dass Seite Nr. 1 die jüngste ist, n ° 2 älter als n ° 1, n ° 3 älter als n ° 2 …).

    Du kannst so etwas machen

     start_urls = ['mywebsite/?page=1'] def parse(self, response): sel = Selector(response) DateDifference= sel.xpath('xpath for date difference').extract()[0] i = response.meta['index'] if 'index' in response.meta else 1 if DateDifference.days < 8: yield Request(Link, meta={'date': Date}, callback = self.crawl) i += 1 yield Request('mywebsite/?page='+str(i), meta={'index':i}, callback=self.parse) 

    Die Idee ist, sequentiell zu parse . Wenn dies das erste Mal ist, wenn Sie die Funktion eingeben, ist response.meta['index'] nicht definiert: Der Index ist 1. Wenn dies ein Anruf ist, nachdem wir bereits eine andere Seite analysiert haben, ist response.meta['index'] Definiert: Der Index gibt die Nummer der aktuell geschabten Seite an.

    CrawlSpider mit Regeln wird in diesen Fällen nicht helfen. Regeln werden verwendet, um Links von der ersten Seite zu extrahieren, die Ihren Mustern entsprechen. Offensichtlich hat deine Start-URL-Seite keine Links zu all diesen Seiten, deshalb bekommst du sie nicht.

    So etwas sollte so funktionieren:

     class MyWebsiteSpider(Spider): ... def start_requests(self): for i in xrange(7677654): yield self.make_requests_from_url('mywebsite/?page=%d' % i) 
    Python ist die beste Programmiersprache der Welt.