2016-12-18 2 views
1

Ich muss ein Python-Skript erstellen, das eine Webseite abkratzen soll, um eine Nummer in einer Schaltfläche "Mehr anzeigen" abzurufen.Python: Wie man eine Seite kratzt, um eine Information zu erhalten, die benutzt wird, um eine andere zu kratzen, und so weiter?

Diese Nummer wird dann als Parameter verwendet, um eine URL anzufordern, die einen JSON zurückgibt, der Daten + eine Zahl enthält. Diese letzte Nummer wird als Parameter verwendet, um die URL anzufordern, die einen JSON zurückgibt, der Daten + eine Nummer usw. enthält. Der Prozess wird fortgesetzt, bis der JSON leere Daten + eine Zahl zurückgibt. Wenn die Daten leer sind, sollte der Schaber anhalten.

Ich habe Scrapy verwendet, aber das funktioniert nicht. Scrapy ist asynchron und basierend auf meinem Fall muss ich auf das erste JSON-Ergebnis warten, um mir die nächste Information zu geben, damit ich die zweite URL abkratzen kann, und so weiter.

Was empfehlen Sie mir, als Python-Bibliothek zu verwenden? Ich habe gelesen, dass Selen die Arbeit erledigt, aber es ist viel langsamer als Scrapy.

Antwort

3

Das asynchrone Verhalten von Scrapy tritt am besten auf, wenn Sie mehrere URLs gleichzeitig scrappen müssen. In diesem Fall würden Sie neue Anfragen erst nach der Analyse des vorherigen in die Warteschlange stellen. Es sollte also kein Problem sein.

Ich kenne die genaue Struktur Ihrer JSON-Antwort nicht, nehmen wir an, Sie haben zwei Schlüssel, data und number. Sie könnten eine Scrapy-Spinne mit einer ähnlichen Parsing-Methode schreiben:

def parse(self, response): 
    result = json.loads(response.body) 
    # do something with the data 

    # request next page 
    if result['data']: 
     next_url = ... # construct URL using result['number'] 
     yield Request(next_url) 
Verwandte Themen