comcrawl是一個 python 包,用於輕鬆查詢和下載 commoncrawl.org 的頁面。
閱讀這篇文章後,我受到啟發,開始進行comcrawl 。
注意:我做這個是為了個人項目和樂趣。因此,該套件適用於中小型項目,因為它沒有針對處理千兆位元組或太字節資料進行最佳化。在這種情況下,您可能需要查看 cdx-toolkit 或 cdx-index-client。
Common Crawl 專案是一個「任何人都可以存取和分析的網路爬行資料的開放儲存庫」 。它包含數十億個網頁,通常用於 NLP 專案收集大量文字資料。
Common Crawl 提供了一個搜尋索引,您可以使用該索引在其爬網資料中搜尋某些 URL。每個搜尋結果都包含指向其 AWS S3 儲存桶中特定位置的連結和位元組偏移量,用於下載頁面。
comcrawl透過提供可在 python 程式中使用的簡單 API 接口,簡化了從 Common Crawl 搜尋和下載的過程。
comcrawl可在 PyPI 上使用。
從終端機運行以下命令,透過 pip 安裝它:
pip install comcrawl
呼叫download
方法後,每個頁面的 HTML 將作為每個結果字典中「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
會取得目前可用的 Common Crawl 索引清單以進行搜尋。您也可以將搜尋指定為清單來將搜尋限制為某些常見爬網索引。
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 維護者之一發布的這些指南:
https://groups.google.com/forum/#!msg/common-crawl/3QmQjFA_3y4/vTbhGqIBBQAJ