用于下载常用爬网数据的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在AlertDialog builder标题右侧放置图标   安装weblogic server12时发生java获取错误。1在windows 10上   java无法导入:安卓。支持v7。小装置。Android Studio中的RecyclerView   java Android应用程序等待通知奇怪行为   java如何比较ArrayList中的整数元素?   java Quartz属性不会触发Quartz作业   java轻松地将许多JavaFX属性绑定到UINode   Maven插件管理器导致java错误消息的原因是什么?   JAXB解组错误后java文件被阻止   java如何在spark kafka流中创建消费者组并将消费者分配给消费者组   java Gps lat&long随机显示非常不准确的结果   java使用assest文件夹文件在Android上执行shell命令   java如何在客户端使用javascript提取文本   java扩展描述的distincts之和   java重写默认Spring数据REST配置   java SQL未命名参数语法   二进制搜索任务的java真实解决方案   java在一个多模块多数据源项目中,用什么正确的方式来指示将哪个数据源注入我的DAOs?