comcrawl は、commoncrawl.org からページを簡単にクエリしてダウンロードするための Python パッケージです。
この記事を読んでcomcrawlを作ろうと思ったきっかけがありました。
注:これは個人的なプロジェクトと楽しみのために作成しました。したがって、このパッケージはギガバイトやテラバイトのデータを処理するように最適化されていないため、小規模から中規模のプロジェクトでの使用を目的としています。このような場合は、cdx-toolkit または cdx-index-client をチェックアウトするとよいでしょう。
Common Crawl プロジェクトは、「誰でもアクセスして分析できる Web クロール データのオープン リポジトリ」です。これには数十億の Web ページが含まれており、大量のテキスト データを収集するために NLP プロジェクトでよく使用されます。
Common Crawl は、クロールされたデータ内の特定の URL を検索するために使用できる検索インデックスを提供します。各検索結果には、ページをダウンロードするための AWS S3 バケット内の特定の場所へのリンクとバイト オフセットが含まれています。
comcrawl は、 Python プログラムで使用できるシンプルな API インターフェイスを提供することで、Common Crawl からの検索とダウンロードのプロセスを簡素化します。
comcrawl はPyPI で利用できます。
ターミナルから次のコマンドを実行して、pip 経由でインストールします。
pip install comcrawl
各ページの HTML は、 download
メソッドを呼び出した後、各結果ディクショナリの「html」キーの文字列として利用可能になります。
from comcrawl import IndexClient
client = IndexClient ()
client . search ( "reddit.com/r/MachineLearning/*" )
client . download ()
first_page_html = client . results [ 0 ][ "html" ]
使用するスレッドの数を指定することで、検索またはダウンロード中にマルチスレッドを利用できます。
Common Crawl サーバーに過度のストレスをかけないように、これをやりすぎないように注意してください (行動規範を参照してください)。
from comcrawl import IndexClient
client = IndexClient ()
client . search ( "reddit.com/r/MachineLearning/*" , threads = 4 )
client . download ( threads = 4 )
このパッケージを pandas ライブラリと簡単に組み合わせて、重複した結果を除外し、ディスクに永続化することができます。
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" )
ここでは urlkey だけでは十分ではない可能性があるため、重複を削除するために結果のプロパティからカスタム ID を計算する関数を作成することをお勧めします。
デフォルトでは、 IndexClient
インスタンス化されると、現在利用可能な共通クロール インデックスのリストを取得して検索します。リストとして指定することで、特定の共通クロール インデックスに検索を制限することもできます。
from comcrawl import IndexClient
client = IndexClient ([ "2019-51" , "2019-47" ])
client . search ( "reddit.com/r/MachineLearning/*" )
client . download ()
コードをデバッグするときに、行われたすべての HTTP リクエストのログを有効にすることができます。
from comcrawl import IndexClient
client = IndexClient ( verbose = True )
client . search ( "reddit.com/r/MachineLearning/*" )
client . download ()
Common Crawl にアクセスするときは、Common Crawl メンテナーの 1 人が投稿した次のガイドラインに注意してください。
https://groups.google.com/forum/#!msg/common-crawl/3QmQjFA_3y4/vTbhGqIBBQAJ