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