Sie können es auf den Facebook- und Twitter-Timelines sehen, zum Ende der Seite scrollen und es werden neue Informationen geladen.
Der Grund, warum ich mich entschied, die unendliche Bildlaufseite zu crawlen, war, dass ich wegen Schulproblemen an Tweets auf Twitter vorbeischauen musste. Nun, Sie sagen, dass Twitter eine offizielle API hat. Die offizielle Twitter-API ist nicht sehr freundlich und so konzipiert, dass Sie keine Tweets erhalten können, die älter als eine Woche sind **. Mit anderen Worten, wenn Sie ältere Tweets erhalten möchten, müssen Sie sich selbst kriechen. Und da Twitter-Suchergebnisse mit ** infinite scroll ** angezeigt werden, müssen Sie die Seite crawlen, die unendlich scrollt.
Der Crawler funktioniert grundsätzlich wie folgt:
Auf diese Weise wird eine große Datenmenge aus dem Netz abgerufen. Das Problem beim Crawlen von Seiten mit unendlichem Bildlauf ist das Blättern (wie man durch Suchergebnisse usw. mit Links wie "1 Seite", "2 Seiten", "nächste Seite" unten navigiert). Im Gegensatz zu der von mir verwendeten Seite ** gibt es im HTML-Code der Seite keinen Link zum nächsten Suchergebnis **. Dies bedeutet, dass vorhandene Crawler-Frameworks (wie Scrapy for Python) nicht konkurrieren können. Dieses Mal werde ich vorstellen, wie man eine so mühsame unendliche Bildlaufseite crawlt, auch als mein eigenes Memo.
Selbst wenn ich nur die Theorie einführe, erkläre ich dies anhand des Crawlers, den ich tatsächlich geschrieben habe und der als Beispiel vergangene Tweets von Twitter abruft. Die Quelle finden Sie im Github-Repository. https://github.com/keitakurita/twitter_past_crawler
Apropos,
$ pip install twitterpastcrawler
Aber Sie können es installieren.
Wie funktioniert das unendliche Scrollen überhaupt? Selbst die unendliche Schriftrolle, dass Sie die Unendlichkeit des Ergebnisses irgendwo im Voraus laden, ist die Datenmenge unmöglich. Mit anderen Worten, beim unendlichen Scrollen werden jedes Mal, wenn der Benutzer nach unten scrollt, ** dynamisch ** zusätzliche Daten hinzugefügt. Damit das unendliche Scrollen funktioniert,
Sie können analysieren, wie dies tatsächlich erreicht wird, indem Sie sich ansehen, welche Art von Anfrage Twitter hinter den Kulissen sendet. Suchen Sie als Test nach dem Wort Qiita. Ich verwende Chrome, aber jeder Browser kann den Status des Netzwerks sehen, das hinter der Seite ausgeführt wird. Für Chrome können Sie es unter "Ansicht" -> "Entwicklung / Verwaltung" -> "Entwicklertools" -> Netzwerk anzeigen. Wenn Sie es öffnen, sollte ein Bildschirm wie der folgende angezeigt werden:
Wenn Sie einige Male nach unten scrollen, wird eine verdächtige URL angezeigt, die mehrmals in der Liste der Anforderungen angezeigt wird:
https://twitter.com/i/search/timeline?vertical=default&q=qiita&src=typd&composed_count=0&include_available_features=1&include_entities=1&include_new_items_bar=true&interval=30000&lang=en&latent_count=0&min_position=TWEET-829694142603145216-833144090631942144-BD1UO2FFu9QAAAAAAAAETAAAAAcAAAASAAAAAAAAQAAEIIAAAAYAAAAAAACAAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAQAAAAAEAAAAAAAAAAAABAAAAAAAAAAAAAIAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAEAIACAIQIAAAgAAAAAAAASAAAAAAAAAAAAAAAAAAAAAA
Dieser letzte Parameter, "min_position", ist offensichtlich verdächtig. Wenn Sie das Ergebnis dieser Antwort herunterladen und sehen, können Sie sehen, dass es sich um eine Antwort im JSON-Format handelt. Mit Blick auf den Inhalt,
focused_refresh_interval: 240000
has_more_items: false
items_html: ...
max_position: "TWEET-829694142603145216-833155909996077056-BD1UO2FFu9QAAAAAAAAETAAAAAcAAAASAAAAAAAAQAAEIIAAAAYAAAAAAACAAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAQAAAAAEAAAAAAAAAAAABAAAAAAAAAAAAAIAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAEAIACAIQIAAAgAAAAAAAASAAAAAAAAAAAAAAAAAAAAAA"
items_html
enthält das rohe HTML des Tweets. Dies ist der Inhalt des Tweets, den Sie suchen.
Bemerkenswert ist der Parameter max_position
. Es sollte das gleiche Format wie der vorherige Parameter namens "min_position" haben. Wenn Sie versuchen, dies mit der "min_position" der vorherigen URL auszutauschen und die Anfrage erneut zu senden, erhalten Sie eine Antwort im gleichen Format. Mit anderen Worten, diese "min_position" ist der zu suchende Schlüsselparameter.
An diesem Punkt ist der Rest einfach. Im Prinzip können Sie crawlen, indem Sie den folgenden Vorgang wiederholen:
items_html
entsprechendIn dem Paket, das ich erstellt habe, wird der obige Vorgang automatisch ausgeführt, indem die Abfrageinformationen wie unten gezeigt in die CSV-Datei ausgegeben werden.
sample.py
import twitterpastcrawler
crawler = twitterpastcrawler.TwitterCrawler(
query="qiita", #Suchen Sie nach Tweets, die das Schlüsselwort qiita enthalten
output_file="qiita.csv" # qiita.Geben Sie Tweet-Informationen in eine Datei namens csv aus
)
crawler.crawl() #Beginnen Sie zu kriechen
Wenn Sie an Tweets von Twitter vorbeikommen, können Sie herausfinden, welche Art von Tweets während eines bestimmten Ereignisses (z. B. Wahl- oder Spielveröffentlichungsdatum) erstellt wurden, was interessant ist. Überlegen. Da die Anzahl der Seiten mit unendlichem Bildlauf zunimmt, denke ich, dass die Verwendung von Crawl-Seiten mit unendlichem Bildlauf in Zukunft zunehmen wird.
Recommended Posts