AutoScraper:一个更加智能方便的爬虫库


前言

最近是发现了一个比较厉害的 Python 第三方库:AutoScraper,目前在 Github 有 3k star,号称是智能、简单、快速易上手的一个轻量级 Web 爬虫,爬虫我也写的不少了,从 beautiful 到 lxml 等也用过不少爬虫第三方库,平常因为电脑上已经积攒了一些成熟的代码,所以有时候写爬虫就直接把以前的代码拿过来用了,这次这个 AutoScraper 本来并没有打算学习,因为感觉没太大必要,但是看大佬说这个更加智能,号称有 AI 学习能力,所以今天就想着上手试试吧,大致试了一下感觉还真的很不错,5 分钟上手真不是吹的。本来以为这个就是个简易的小玩意儿,不适合大项目使用,后来深入发现大项目使用也是很好的。

安装

安装的话就跟平常安装其他第三方库一样,直接 pip 安装即可

pip install autoscraper

示例1-单个元素内容

他的 Github 上有关于爬取 stackoverflow 的示例,我这里不再演示,我想选取一个国内的 CSDN 专栏站点作为演示。

image-20201208210918491

先放一张我爬取的时候的图片,比如说我想爬取上图专栏中红色方框圈起来的专栏标题名称,那么我们只需使用如下代码即可:

from autoscraper import AutoScraper

url = 'https://gitchat.csdn.net/aggregation/columns?columnBy=all'
wanted_list = ['从 0 开始搭建 IoT 平台']
scraper = AutoScraper()
result = scraper.build(url, wanted_list)
print(result)

然后即可得到 list 类型的返回结果,可以看到只用指定一个已知的就可以获取所有的内容了:

['从 0 开始搭建 IoT 平台', '案例上手 Python 数据可视化', 'RocketMQ 实战与进阶', '数据仓库原理与实战精讲', '深入理解 Sentinel', 'Kubernetes 实践入门指南', 'Python 全栈 60 天精
通之路', 'Python 全栈 450 道常见问题全解析(配套教学)', '大数据实时计算引擎 Flink 实战与性能优化', 'JVM 核心技术 32 讲', '程序员的 MySQL 面试金典', 'Python 3 天从入门到入职完 
整学习路线', 'Java 面试全解析:核心知识点与典型面试题', '数据结构算法面试全解析', '详解大数据面试核心知识', '看动画,拿 Offer:大厂算法面试真题全解析', '分布式中间件实践之路', 'Serverless 技术公开课', '机器学习中的数学(全集)', '程序员的 Redis 面试金典', '敏捷中国史', 'Linux GDB 调试指南', '互联网分布式系统开发实战(上)', '机器学习极简入门', '机器学习
中的数学:概率图与随机过程', '机器学习中的数学:概率统计', '白话设计模式 28 讲', '编程算法同步学', 'Spring Cloud 微服务开发实战', '实战 Flutter 象棋从零到上架', '中文自然语言处
理入门', 'Dart 入门实践', '领域驱动设计实践(战略+战术)', 'Docker 核心知识必知必会', '前端开发核心知识进阶', 'ElasticSearch 大数据搜索查询分析全指南', '案例上手 Spring 全家桶', '全栈工程师实战:从 0 开发云笔记', 'C/C++ 多线程编程精髓', '重学 Go 语言:进阶篇', '重学 Go 语言:基础篇', '工程师实战方法论核心 12 讲', '攻克 Linux 系统编程', '算法设计实战 50 讲', 'Netty + JavaFx 实战:仿桌面版微信聊天', 'Redis 核心原理与实战', '零基础入门微信小程序开发 (2020 版)', '经典设计模式实战演练', '图解敏捷教练和 ScrumMaster', 'Python 开 
发 14 天快速入门', 'Spring Cloud 极简入门', '「作者面对面」访谈录', '尚老师产品思维 21 讲', '自然语言处理面试基础', 'Gin 框架入门实践', '深入浅出学 Netty', '张亮的运营思维课', '机器学习中的数学:微积分与最优化', '机器学习中的数学:线性代数', '接口自动化测试实战', 'SQL 从入门到精通', 'Flutter:从入门到实践', 'CNCF X 阿里巴巴云原生技术公开课', 'Angular 基础教程', '透视前端工程化', '精通 Spring Boot 42 讲', 'Spring Cloud 快速入门', '领域驱动设计实践(战术篇)', '领域驱动设计实践(战略篇)', '高可用 Elasticsearch 集群 21 讲', 'Electron 开发入门', 'MQTT 协议快速入门', 'SSM 博客系统开发实战', 'Deeplearning4j 快速入门', '成为创新高手的 18 堂课', '深度学习 PyTorch 极简入门', 'PostgreSQL 优化器入门', ' 
从零开始掌握微服务软件测试', '程序员职场进阶 32 讲', 'SSM 搭建精美实用的管理系统', '区块链全景课', 'GitQ: GitHub 入味儿', '如何从零学习 React 技术栈', '28 天通关 Spring Boot-第01期', 'Webpack 前端工程化入门', '深入浅出 Docker 技术栈实践课', 'React Native 实战:构建电商 App']

示例2-多个元素内容

写爬虫的时候我们一般遵循的原则是,一次性的爬取获取更多的内容,避免多次爬取。所以,我们在对 CSDN 专栏进行爬取的时候,比如说我们想要爬取标题,还想要爬取讲师名称,那么我们肯定是最好在一次的访问中完成所有数据的提取,这次爬取示例图中的标题和讲师信息:

image-20201208212337088

代码如下:

from autoscraper import AutoScraper

url = 'https://gitchat.csdn.net/aggregation/columns?columnBy=all'
wanted_list = ['从 0 开始搭建 IoT 平台','物联网创业者兼 CTO 付强']
scraper = AutoScraper()
result = scraper.build(url, wanted_list)
print(result)

通过对比刚才的代码可以很容易的发现,多爬取了讲师信息,其实也就是在代码的 wanted_list 中多加了一个示例内容而已,这样来看它用起来是不是很简单。

使用代理

在爬虫中经常也会遇到需要使用到代理的情况,AutoScraper 使用代理也是非常方便,符合人性化设计规范。代理代码示例:

from autoscraper import AutoScraper

proxies = {
    "http": 'http://127.0.0.1:8001',
    "https": 'https://127.0.0.1:8001',
}

url = 'https://gitchat.csdn.net/aggregation/columns?columnBy=all'
wanted_list = ['从 0 开始搭建 IoT 平台','物联网创业者兼 CTO 付强']
scraper = AutoScraper()
result = scraper.build(url, wanted_list, request_args=dict(proxies=proxies))
print(result)

保存模型与加载模型

对于网站内容数据经常变化的站点,我们有时候不可能实时知道页面上的内容,所以我们可以使用保存模型的方法,将模型保存下来,下次直接加载模型就可以使用了。

模型保存,直接将模型保存为 csdn.txt

from autoscraper import AutoScraper

url = 'https://gitchat.csdn.net/aggregation/columns?columnBy=all'
wanted_list = ['从 0 开始搭建 IoT 平台','物联网创业者兼 CTO 付强']
scraper = AutoScraper()
result = scraper.build(url, wanted_list)

scraper.save('csdn.txt')
print(result)

加载模型进行爬取数据:

from autoscraper import AutoScraper

url = 'https://gitchat.csdn.net/aggregation/columns?columnBy=all'

scraper = AutoScraper()
scraper.load('csdn.txt')
result = scraper.get_result_similar(url)

print(result)

这样获取到的结果就和示例2中获取到的结果是一样的的了。

总结

总体来说,这个库是非常强大的,而且真的非常易上手,5 分钟学会不是问题。而且最重要的是关于字符串的处理这些它在内部就已经把多余的换行符等给处理掉了,还是很人性化的。特别是对于简单爬虫或者快速数据需求的,这个感觉是非常好用的,而且还不用配置一大堆的 header 头等。

参考

Github:https://github.com/alirezamika/autoscraper

AutoScraper and Flask: Create an API From Any Website in Less Than 5 Minutes:https://medium.com/better-programming/autoscraper-and-flask-create-an-api-from-any-website-in-less-than-5-minutes-3f0f176fc4a3

CSDN 专栏:https://gitchat.csdn.net/aggregation/columns?columnBy=all


文章作者: Writeup
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Writeup !
 上一篇
红队钓鱼之RLO字符串反转 红队钓鱼之RLO字符串反转
前言有时候红队在工作的时候喜欢用上社工钓鱼手段,但是随着被钓鱼者上当受骗的次数的增加,一般都不会去主动打开类似于 .exe 类型的文件了,所以得另想其他方法。 方法我们这次可以使用 RLO,它在 Windows 中是的意思是将字符串反转,原
2020-12-19
下一篇 
Linux系统免密码登录 Linux系统免密码登录
前言现在在日常工作中,不管是在渗透测试中,还是日常运维中,最经常打交道的就是 Linux 服务器了,今天就来记录一下使用 ssh 免密码登录 Linux 服务器,也可作为权限维持中的后门使用。 过程1.生成密钥对ssh-keygen -t
2020-12-03
  目录