Vous pouvez le voir sur les chronologies Facebook et Twitter, faites défiler vers le bas de la page et il chargera de nouvelles informations.
La raison pour laquelle j'ai décidé d'explorer la page de défilement infini était parce que je devais passer des tweets sur Twitter à cause de problèmes scolaires. Eh bien, vous dites que Twitter a une API officielle. L'API Twitter officielle n'est pas très conviviale et est conçue pour que vous ne puissiez pas recevoir de tweets datant de plus d'une semaine **. En d'autres termes, si vous souhaitez obtenir des tweets plus anciens, vous devez vous explorer. Et puisque les résultats de recherche Twitter sont affichés avec ** défilement infini **, vous devez explorer la page qui défile à l'infini.
Le robot fonctionne essentiellement comme suit:
De cette manière, une grande quantité de données est extraite du réseau. Le problème de l'exploration des pages à défilement infini est la pagination (comment naviguer dans les résultats de recherche, etc. avec des liens tels que "1 page", "2 pages", "page suivante" ci-dessous) Contrairement à la page que j'utilise, ** il n'y a pas de lien vers le résultat de recherche suivant sur le HTML de la page **. Cela signifie que les frameworks de robots existants (tels que Scrapy pour Python) ne peuvent pas rivaliser. Cette fois, je vais vous présenter comment explorer une page à défilement infini aussi gênante, également dans mon propre mémo.
Même si je n'introduis que la théorie, j'expliquerai en utilisant le robot d'exploration que j'ai réellement écrit et qui extrait les tweets de Twitter à titre d'exemple. Veuillez vous référer au référentiel Github pour la source. https://github.com/keitakurita/twitter_past_crawler
Au fait,
$ pip install twitterpastcrawler
Mais vous pouvez l'installer.
Alors, comment fonctionne le défilement infini en premier lieu? Même le défilement infini, que vous chargez l'infini du résultat à l'avance quelque part est la quantité de données impossible. En d'autres termes, le défilement infini consiste ** dynamiquement ** à ajouter des données supplémentaires à chaque fois que l'utilisateur fait défiler vers le bas. Par conséquent, pour que le défilement infini fonctionne,
Vous pouvez analyser comment cela est réellement réalisé en examinant le type de demande que Twitter envoie dans les coulisses. Pour tester, recherchez le mot qiita. J'utilise Chrome, mais n'importe quel navigateur peut voir l'état du réseau fonctionnant derrière la page. Pour Chrome, vous pouvez le voir depuis "Affichage" -> "Développement / Gestion" -> "Outils de développement" -> Réseau. Lorsque vous l'ouvrez, vous devriez voir un écran comme celui ci-dessous:
Si vous faites défiler vers le bas plusieurs fois, vous verrez une URL suspecte qui apparaît plusieurs fois dans la liste des requêtes:
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
Ce dernier paramètre, min_position
, est évidemment suspect. Si vous téléchargez le résultat de cette réponse et le voyez, vous pouvez voir qu'il s'agit d'une réponse au format json. En regardant le contenu,
focused_refresh_interval: 240000
has_more_items: false
items_html: ...
max_position: "TWEET-829694142603145216-833155909996077056-BD1UO2FFu9QAAAAAAAAETAAAAAcAAAASAAAAAAAAQAAEIIAAAAYAAAAAAACAAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAQAAAAAEAAAAAAAAAAAABAAAAAAAAAAAAAIAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAEAIACAIQIAAAgAAAAAAAASAAAAAAAAAAAAAAAAAAAAAA"
ʻItems_htmlcontient le html brut du tweet. C'est le contenu du tweet que vous recherchez. Il convient de noter le paramètre «max_position». Il doit avoir le même format que le paramètre précédent appelé
min_position. Si vous essayez d'échanger ceci avec la
min_position` de l'url précédente et de renvoyer la requête, vous obtiendrez une réponse du même format. En d'autres termes, cette «min_position» est le paramètre clé à rechercher.
À ce stade, le reste est facile. En principe, vous pouvez analyser en répétant le processus suivant:
et
max_position` à partir de la réponse au format json obtenue.max_position
au lieu de min_position
et envoyez la requêteDans le package que j'ai créé, simplement en donnant une requête, le processus ci-dessus est automatiquement exécuté et les informations du tweet sont crachées dans le fichier csv comme indiqué ci-dessous.
sample.py
import twitterpastcrawler
crawler = twitterpastcrawler.TwitterCrawler(
query="qiita", #Rechercher des tweets contenant le mot-clé qiita
output_file="qiita.csv" # qiita.Sortie des informations du tweet dans un fichier appelé csv
)
crawler.crawl() #Commencer à explorer
Si vous pouvez passer outre les tweets de Twitter, vous pouvez découvrir quel type de tweets a été créé lors d'un certain événement (par exemple, une élection ou une date de sortie de jeu), ce qui est intéressant. pense. Étant donné que le nombre de pages à défilement infini augmente, je pense que l'utilisation de pages d'exploration avec défilement infini se développera à l'avenir.
Recommended Posts