comcrawl est un package python permettant d'interroger et de télécharger facilement des pages depuis commoncrawl.org.
J'ai été inspiré pour faire du comcrawl en lisant cet article.
Remarque : j'ai fait ceci pour des projets personnels et pour le plaisir. Ainsi, ce package est destiné à être utilisé dans des projets de petite et moyenne taille, car il n'est pas optimisé pour gérer des gigaoctets ou des téraoctets de données. Vous voudrez peut-être consulter cdx-toolkit ou cdx-index-client dans de tels cas.
Le projet Common Crawl est un « référentiel ouvert de données d'exploration du Web accessible et analysé par n'importe qui » . Il contient des milliards de pages Web et est souvent utilisé pour les projets NLP afin de collecter de grandes quantités de données textuelles.
Common Crawl fournit un index de recherche que vous pouvez utiliser pour rechercher certaines URL dans leurs données analysées. Chaque résultat de recherche contient un lien et un décalage d'octets vers un emplacement spécifique dans leurs compartiments AWS S3 pour télécharger la page.
comcrawl simplifie ce processus de recherche et de téléchargement à partir de Common Crawl en proposant une interface API simple que vous pouvez utiliser dans votre programme Python.
comcrawl est disponible sur PyPI.
Installez-le via pip en exécutant la commande suivante depuis votre terminal :
pip install comcrawl
Le HTML de chaque page sera disponible sous forme de chaîne dans la clé 'html' de chaque dictionnaire de résultats après avoir appelé la méthode download
.
from comcrawl import IndexClient
client = IndexClient ()
client . search ( "reddit.com/r/MachineLearning/*" )
client . download ()
first_page_html = client . results [ 0 ][ "html" ]
Vous pouvez tirer parti du multithreading lors de la recherche ou du téléchargement en spécifiant le nombre de threads que vous souhaitez utiliser.
N'oubliez pas de ne pas en faire trop, afin de ne pas mettre trop de pression sur les serveurs Common Crawl (consultez le Code de conduite).
from comcrawl import IndexClient
client = IndexClient ()
client . search ( "reddit.com/r/MachineLearning/*" , threads = 4 )
client . download ( threads = 4 )
Vous pouvez facilement combiner ce package avec la bibliothèque pandas, pour filtrer les résultats en double et les conserver sur le disque :
from comcrawl import IndexClient
import pandas as pd
client = IndexClient ()
client . search ( "reddit.com/r/MachineLearning/*" )
client . results = ( pd . DataFrame ( client . results )
. sort_values ( by = "timestamp" )
. drop_duplicates ( "urlkey" , keep = "last" )
. to_dict ( "records" ))
client . download ()
pd . DataFrame ( client . results ). to_csv ( "results.csv" )
La clé d'URL seule n'est peut-être pas suffisante ici, vous souhaiterez donc peut-être écrire une fonction pour calculer un identifiant personnalisé à partir des propriétés des résultats pour la suppression des doublons.
Par défaut, une fois instancié, IndexClient
récupère une liste des index Common Crawl actuellement disponibles à rechercher. Vous pouvez également restreindre la recherche à certains index d'exploration courants, en les spécifiant sous forme de liste.
from comcrawl import IndexClient
client = IndexClient ([ "2019-51" , "2019-47" ])
client . search ( "reddit.com/r/MachineLearning/*" )
client . download ()
Lors du débogage de votre code, vous pouvez activer la journalisation de toutes les requêtes HTTP effectuées.
from comcrawl import IndexClient
client = IndexClient ( verbose = True )
client . search ( "reddit.com/r/MachineLearning/*" )
client . download ()
Lorsque vous accédez à Common Crawl, veuillez faire attention à ces directives publiées par l'un des responsables de Common Crawl :
https://groups.google.com/forum/#!msg/common-crawl/3QmQjFA_3y4/vTbhGqIBBQAJ