AntNest
简明飞快的异步爬虫框架(python3.6+),只有600行左右的代码
开箱即用的HTTP客户端
提供Item extractor, 可以明确地声明如何从response解析数据(支持xpath, jpath or regex)
通过 "ensure_future" and "as_completed" api 提供方便的工作流
安装
pip install ant_nest
使用方式:
创建一个Demo项目:
>>> ant_nest -c examples
自动会创建以下文件:
drwxr-xr-x 5 bruce staff 160 Jun 30 18:24 ants -rw-r--r-- 1 bruce staff 208 Jun 26 22:59 settings.py
假设我们想获取GitHub热门仓库,让我们创建一个"examples/ants/example2.py":
from ant_nest import * from yarl import URL class GithubAnt(Ant): """Crawl trending repositories from github""" item_pipelines = [ ItemFieldReplacePipeline( ('meta_content', 'star', 'fork'), excess_chars=('\r', '\n', '\t', ' ')) ] concurrent_limit = 1 # save the website`s and your bandwidth! def __init__(self): super().__init__() self.item_extractor = ItemExtractor(dict) self.item_extractor.add_pattern( 'xpath', 'title', '//h1/strong/a/text()') self.item_extractor.add_pattern( 'xpath', 'author', '//h1/span/a/text()', default='Not found') self.item_extractor.add_pattern( 'xpath', 'meta_content', '//div[@class="repository-meta-content col-11 mb-1"]//text()', extract_type=ItemExtractor.EXTRACT_WITH_JOIN_ALL) self.item_extractor.add_pattern( 'xpath', 'star', '//a[@class="social-count js-social-count"]/text()') self.item_extractor.add_pattern( 'xpath', 'fork', '//a[@class="social-count"]/text()') async def crawl_repo(self, url): """Crawl information from one repo""" response = await self.request(url) # extract item from response item = self.item_extractor.extract(response) item['origin_url'] = response.url await self.collect(item) # let item go through pipelines(be cleaned) self.logger.info('*' * 70 + 'I got one hot repo!\n' + str(item)) async def run(self): """App entrance, our play ground""" response = await self.request('https://github.com/explore') for url in response.html_element.xpath( '/html/body/div[4]/div[2]/div/div[2]/div[1]/article//h1/a[2]/' '@href'): # crawl many repos with our coroutines pool self.schedule_coroutine( self.crawl_repo(response.url.join(URL(url)))) self.logger.info('Waiting...')
然后我们可以列出所有可运行的爬虫(在"examples"文件夹下)
>>> $ant_nest -l ants.example2.GithubAnt
运行! (without debug log):
>>> ant_nest -a ants.example2.GithubAnt INFO:GithubAnt:Opening INFO:GithubAnt:Waiting... INFO:GithubAnt:**********************************************************************I got one hot repo! {'title': 'NLP-progress', 'author': 'sebastianruder', 'meta_content': 'Repository to track the progress in Natural Language Processing (NLP), including the datasets and the current state-of-the-art for the most common NLP tasks.', 'star': '3,743', 'fork': '327', 'origin_url': URL('https://github.com/sebastianruder/NLP-progress')} INFO:GithubAnt:**********************************************************************I got one hot repo! {'title': 'material-dashboard', 'author': 'creativetimofficial', 'meta_content': 'Material Dashboard - Open Source Bootstrap 4 Material Design Adminhttps://demos.creative-tim.com/materi…', 'star': '6,032', 'fork': '187', 'origin_url': URL('https://github.com/creativetimofficial/material-dashboard')} INFO:GithubAnt:**********************************************************************I got one hot repo! {'title': 'mkcert', 'author': 'FiloSottile', 'meta_content': "A simple zero-config tool to make locally-trusted development certificates with any names you'd like.", 'star': '2,311', 'fork': '60', 'origin_url': URL('https://github.com/FiloSottile/mkcert')} INFO:GithubAnt:**********************************************************************I got one hot repo! {'title': 'pure-bash-bible', 'author': 'dylanaraps', 'meta_content': '�� A collection of pure bash alternatives to external processes.', 'star': '6,385', 'fork': '210', 'origin_url': URL('https://github.com/dylanaraps/pure-bash-bible')} INFO:GithubAnt:**********************************************************************I got one hot repo! {'title': 'flutter', 'author': 'flutter', 'meta_content': 'Flutter makes it easy and fast to build beautiful mobile apps.https://flutter.io', 'star': '30,579', 'fork': '1,337', 'origin_url': URL('https://github.com/flutter/flutter')} INFO:GithubAnt:**********************************************************************I got one hot repo! {'title': 'Java-Interview', 'author': 'crossoverJie', 'meta_content': '��\u200d�� Java related : basic, concurrent, algorithm https://crossoverjie.top/categories/J…', 'star': '4,687', 'fork': '409', 'origin_url': URL('https://github.com/crossoverJie/Java-Interview')} INFO:GithubAnt:Closed INFO:GithubAnt:Get 7 Request in total INFO:GithubAnt:Get 7 Response in total INFO:GithubAnt:Get 6 dict in total INFO:GithubAnt:Run GithubAnt in 18.157656 seconds
我们可以通过类属性来配置我们的爬虫
class Ant(abc.ABC): response_pipelines: List[Pipeline] = [] request_pipelines: List[Pipeline] = [] item_pipelines: List[Pipeline] = [] request_cls = Request response_cls = Response request_timeout = DEFAULT_TIMEOUT.total request_retries = 3 request_retry_delay = 5 request_proxies: List[Union[str, URL]] = [] request_max_redirects = 10 request_allow_redirects = True response_in_stream = False connection_limit = 100 # see "TCPConnector" in "aiohttp" connection_limit_per_host = 0 concurrent_limit = 100
Item代表我们最终想获取的单个数据,不是一个具体的类,它可以是一个简单的字典,自定义的类甚至是ORM对象,取决于我们的需要和选择
2017-03-09 | carlSQ | iOS 简介 AntNest 是吸收了 Go 语言的 Interface 模型的 iOS 的 App 模块化解耦编程的框架。 完全解耦的面向接口插件化模块开发运行框架 模块具体实现与接口调用分离 易扩展的模块生命周期、事件分发 设计原则 Go 语言的 Interface 模型 蚁巢的蚁室蚁道模型 基本架构 antRoom 为单独的模块 antChanne
本文向大家介绍python爬虫框架talonspider简单介绍,包括了python爬虫框架talonspider简单介绍的使用技巧和注意事项,需要的朋友参考一下 1.为什么写这个? 一些简单的页面,无需用比较大的框架来进行爬取,自己纯手写又比较麻烦 因此针对这个需求写了talonspider: •1.针对单页面的item提取 - 具体介绍点这里 •2.spider模块 - 具体介绍点这里 2.介
本文向大家介绍简单好用的nodejs 爬虫框架分享,包括了简单好用的nodejs 爬虫框架分享的使用技巧和注意事项,需要的朋友参考一下 这个就是一篇介绍爬虫框架的文章,开头就不说什么剧情了。什么最近一个项目了,什么分享新知了,剧情是挺好,但介绍的很初级,根本就没有办法应用,不支持队列的爬虫,都是耍流氓。 所以我就先来举一个例子,看一下这个爬虫框架是多么简单并可用。 第一步:安装 Crawl-pet
本文向大家介绍分享一个简单的java爬虫框架,包括了分享一个简单的java爬虫框架的使用技巧和注意事项,需要的朋友参考一下 反复给网站编写不同的爬虫逻辑太麻烦了,自己实现了一个小框架 可以自定义的部分有: 请求方式(默认为Getuser-agent为谷歌浏览器的设置),可以通过实现RequestSet接口来自定义请求方式 储存方式(默认储存在f盘的html文件夹下),可以通过SaveUtil接口来
主要内容:Scrapy下载安装,创建Scrapy爬虫项目,Scrapy爬虫工作流程,settings配置文件Scrapy 是一个基于 Twisted 实现的异步处理爬虫框架,该框架使用纯 Python 语言编写。Scrapy 框架应用广泛,常用于数据采集、网络监测,以及自动化测试等。 提示:Twisted 是一个基于事件驱动的网络引擎框架,同样采用 Python 实现。 Scrapy下载安装 Scrapy 支持常见的主流平台,比如 Linux、Mac、Windows 等,因此你可以很方便的安装它
本文向大家介绍Python的Scrapy爬虫框架简单学习笔记,包括了Python的Scrapy爬虫框架简单学习笔记的使用技巧和注意事项,需要的朋友参考一下 一、简单配置,获取单个网页上的内容。 (1)创建scrapy项目 (2)编辑 items.py (3)在 spiders 文件夹下,创建 blog_spider.py 需要熟悉下xpath选择,感觉跟JQuery选择器差不多,但是不如
本文向大家介绍关于爬虫和反爬虫的简略方案分享,包括了关于爬虫和反爬虫的简略方案分享的使用技巧和注意事项,需要的朋友参考一下 前言 爬虫和反爬虫日益成为每家公司的标配系统。 爬虫在情报获取、虚假流量、动态定价、恶意攻击、薅羊毛等方面都能起到很关键的作用,所以每家公司都或多或少的需要开发一些爬虫程序,业界在这方面的成熟的方案也非常多。 有矛就有盾,每家公司也相应的需要反爬虫系统来达到数据保护、系统稳定
本文向大家介绍Python网络爬虫中的同步与异步示例详解,包括了Python网络爬虫中的同步与异步示例详解的使用技巧和注意事项,需要的朋友参考一下 一、同步与异步 模板 tips: await表达式中的对象必须是awaitable requests不支持非阻塞 aiohttp是用于异步请求的库 代码 gevent简介 gevent是一个python的并发库,它为各种并发和网络相关的任务提供了整洁的
图片来源于网络 1. 爬虫的定义 网络爬虫(又称为网页蜘蛛,网络机器人,在 FOAF 社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。—— 百度百科定义 详细定义参照 慕课网注解: 爬虫其实是一种自动化信息采集程序或脚本,可以方便的帮助大家获得自己想要的特定信息。比如说,像百度,谷歌等搜索引擎