用于下载常用爬网数据的python实用程序。

comcrawl的Python项目详细描述


Comcraw公司

GitHub Workflow StatuscodecovGitHub

comscrawl是一个python包,用于从commoncrawl.org轻松查询和下载页面。在

简介

通过阅读这篇article,我受到启发,制作了comcrawl。在

注意:我做这个是为了个人项目和娱乐。因此,这个包打算在中小型项目中使用,因为它没有针对处理千兆字节或兆字节的数据进行优化。在这种情况下,您可能想查看cdx-toolkitcdx-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”键中。在

^{pr2}$

多线程

通过指定要使用的线程数,可以在搜索或下载时利用多线程。在

请记住不要做得太多,这样就不会对常见的爬网服务器施加太大的压力(请看一下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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在表被注释到配置之前获取表的元数据?   java滚动条不会出现在JList上   java JOGL监视器GPU内存   java为什么要使用RecyclerView onDraw延迟   java定制Oppo Reno 2 Z CPH1951(手机型号)的固件(闪存文件)   java自定义线程池执行器   java如何解决发布版本中重复的jar条目[com/安卓/volley/R.class]?   java如何使用Bukkit API触发事件?   java在blazemeter jmeter RTE插件中使用ctrl+w输入   C#/Visual Studio的java JDT等价物   java为什么当maxread值很大而收到的消息数量很小时,卡夫卡消费者会无限期消费?   java游戏2。x:包含模板列表的绑定模型   带压缩的java日志旋转   运行时。exec用java运行程序读取它正在做什么