用于下载常用爬网数据的python实用程序。
comcrawl的Python项目详细描述
Comcraw公司
comscrawl是一个python包,用于从commoncrawl.org轻松查询和下载页面。在
简介
通过阅读这篇article,我受到启发,制作了comcrawl。在
注意:我做这个是为了个人项目和娱乐。因此,这个包打算在中小型项目中使用,因为它没有针对处理千兆字节或兆字节的数据进行优化。在这种情况下,您可能想查看cdx-toolkit或cdx-index-client。在
什么是普通爬行?
常见的爬网项目是一个“开放的web爬网数据存储库,任何人都可以访问和分析它”。 它包含数十亿个网页,经常用于NLP项目来收集大量的文本数据。在
Common Crawl提供了一个search index,可用于在其已爬网数据中搜索某些URL。 每个搜索结果都包含指向其AWS S3 buckets中特定位置的链接和字节偏移量,以下载页面。在
comcrawl提供了什么?
comscrawl通过提供一个可以在python程序中使用的简单API接口,简化了从普通爬网进行搜索和下载的过程。在
安装
comcrawl在PyPI上可用。在
从终端运行以下命令,通过pip安装它:
pip install comcrawl
使用
基本
在调用download
方法后,每个页面的HTML将作为字符串出现在每个结果字典的“HTML”键中。在
多线程
通过指定要使用的线程数,可以在搜索或下载时利用多线程。在
请记住不要做得太多,这样就不会对常见的爬网服务器施加太大的压力(请看一下Code of Conduct)。在
fromcomcrawlimportIndexClientclient=IndexClient()client.search("reddit.com/r/MachineLearning/*",threads=4)client.download(threads=4)
删除重复项并保存
您可以轻松地将此包与pandas库结合起来,筛选出重复的结果并将其持久化到磁盘:
fromcomcrawlimportIndexClientimportpandasaspdclient=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
会获取当前可用的常用爬网索引列表进行搜索。还可以将搜索限制为某些常用爬网索引,方法是将它们指定为列表。在
fromcomcrawlimportIndexClientclient=IndexClient(["2019-51","2019-47"])client.search("reddit.com/r/MachineLearning/*")client.download()
记录HTTP请求
在调试代码时,您可以启用对发出的所有HTTP请求的日志记录。在
fromcomcrawlimportIndexClientclient=IndexClient(verbose=True)client.search("reddit.com/r/MachineLearning/*")client.download()
行为准则
访问普通爬网时,请注意以下由常见爬网维护者发布的指南:
https://groups.google.com/forum/#!msg/common-crawl/3QmQjFA_3y4/vTbhGqIBBQAJ
- 项目
标签: