comcrawl ist ein Python-Paket zum einfachen Abfragen und Herunterladen von Seiten von commoncrawl.org.
Die Lektüre dieses Artikels hat mich zu Comcrawl inspiriert.
Hinweis: Ich habe dies für persönliche Projekte und zum Spaß gemacht. Daher ist dieses Paket für den Einsatz in kleinen bis mittleren Projekten gedacht, da es nicht für die Verarbeitung von Gigabytes oder Terabytes an Daten optimiert ist. In solchen Fällen sollten Sie sich vielleicht cdx-toolkit oder cdx-index-client ansehen.
Das Common Crawl-Projekt ist ein „offenes Repository für Web-Crawl-Daten, auf das jeder zugreifen und es analysieren kann“ . Es enthält Milliarden von Webseiten und wird häufig für NLP-Projekte verwendet, um große Mengen an Textdaten zu sammeln.
Common Crawl bietet einen Suchindex, mit dem Sie in den gecrawlten Daten nach bestimmten URLs suchen können. Jedes Suchergebnis enthält einen Link und einen Byte-Offset zu einem bestimmten Speicherort in ihren AWS S3-Buckets, um die Seite herunterzuladen.
comcrawl vereinfacht diesen Prozess des Suchens und Herunterladens von Common Crawl, indem es eine einfache API-Schnittstelle bietet, die Sie in Ihrem Python-Programm verwenden können.
comcrawl ist auf PyPI verfügbar.
Installieren Sie es über pip, indem Sie den folgenden Befehl von Ihrem Terminal aus ausführen:
pip install comcrawl
Der HTML-Code für jede Seite ist nach dem Aufruf der download
-Methode als Zeichenfolge im Schlüssel „html“ in jedem Ergebniswörterbuch verfügbar.
from comcrawl import IndexClient
client = IndexClient ()
client . search ( "reddit.com/r/MachineLearning/*" )
client . download ()
first_page_html = client . results [ 0 ][ "html" ]
Sie können Multithreading beim Suchen oder Herunterladen nutzen, indem Sie die Anzahl der Threads angeben, die Sie verwenden möchten.
Bitte denken Sie daran, dies nicht zu übertreiben, damit Sie die Common Crawl-Server nicht zu sehr belasten (siehe Verhaltenskodex).
from comcrawl import IndexClient
client = IndexClient ()
client . search ( "reddit.com/r/MachineLearning/*" , threads = 4 )
client . download ( threads = 4 )
Sie können dieses Paket problemlos mit der Pandas-Bibliothek kombinieren, um doppelte Ergebnisse herauszufiltern und sie auf der Festplatte zu speichern:
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" )
Der URL-Schlüssel allein reicht hier möglicherweise nicht aus. Daher möchten Sie möglicherweise eine Funktion schreiben, um aus den Ergebniseigenschaften eine benutzerdefinierte ID zu berechnen, um Duplikate zu entfernen.
Standardmäßig ruft der IndexClient
bei der Instanziierung eine Liste der derzeit verfügbaren Common Crawl-Indizes für die Suche ab. Sie können die Suche auch auf bestimmte Common Crawl-Indizes beschränken, indem Sie diese als Liste angeben.
from comcrawl import IndexClient
client = IndexClient ([ "2019-51" , "2019-47" ])
client . search ( "reddit.com/r/MachineLearning/*" )
client . download ()
Beim Debuggen Ihres Codes können Sie die Protokollierung aller gestellten HTTP-Anfragen aktivieren.
from comcrawl import IndexClient
client = IndexClient ( verbose = True )
client . search ( "reddit.com/r/MachineLearning/*" )
client . download ()
Beachten Sie beim Zugriff auf Common Crawl bitte die folgenden Richtlinien, die von einem der Common Crawl-Betreuer veröffentlicht wurden:
https://groups.google.com/forum/#!msg/common-crawl/3QmQjFA_3y4/vTbhGqIBBQAJ