如何快速吃牢饭——加速
隐约中有点印象,之前好像有一个公司员工,调高的线程数,加速爬数据,导致对方流量监控报警,然后就凉了。这一块其实已经和爬虫没啥太大关系了,是一些通用的技术。
利用多进程,多线程和协程的手段,实现加速。
这一块知识的理解,需要基于操作系统,可以提前复习一下,再学习此部分内容。
关于加速需要学习的知识点:
- 理解阻塞、非阻塞、同步、异步、并发、并行概念
- 熟悉python队列的使用以及MQ的概念
- 多进程、进程池和进程间通信
- 多线程、线程封装、线程全局变量、线程互斥、守护线程以及join的用法
- 协程、yield关键字、gevent、猴子补丁、asyncio
- 异步请求轮子aiohttp
- 常见解决方案:多线+异步(scrapy的原理)或 多进程+异步
框架在手,天下我有——轮子真香
爬虫领域,只此一家——scrapy。
官方教程:https://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/tutorial.html
scrapy是一个python爬虫框架。我们自己用requests也能写爬虫(GET某个URL,然后Parse网页的内容),那么,问题来了,scrapy高明在哪些地方呢?就算自己写框架,基本也跳不出scrapy的这种设计思想。
各模块之间高内聚,低耦合,通过中间件实现开闭原则。
关于scrapy需要掌握的知识点:
- 理解五大模块与两大中间件的概念和作用
- 熟悉scrapy流程和配置
- 如何更换为其他数据库
和scrapy配套的还有scrapy-redis 分布式,当然你也可以scrapy-monogodb,scrapy-数据库……
在scrapy的基础之上,引入了redis数据,把一些请求的调度去重等任务放到数据库处理。本质上就是一个生产消费的模型。
关于scrapy-redis需要掌握的知识点:
1 掌握如何进行分布式配置
2 scrapy与scrapy-redis的区别
3. 如何更换为其他数据库
另外还有两个定时调度框架:celery和apsheduler。
这里聊聊apsheduler框架
官方文档与翻译:
https://apscheduler.readthedocs.io/en/latest/userguide.html
https://www.jianshu.com/p/4f5305e220f0
apsheduler:强大的任务调度工具,可以完成定时任务,周期任务等,它是跨平台的,用于取代Linux下的cron daemon或者Windows下的task scheduler。
内置三种调度调度系统:Cron风格、间隔性执行和仅在某个时间执行一次。
作业存储的backends支持:Memory、SQLAlchemy (any RDBMS supported by SQLAlchemy works)、MongoDB、Redis、RethinkDB和ZooKeeper。
关于apsheduler需要掌握的知识点:
- Apsheduler的四个组件理解,触发器triggers、任务储存器job stores、执行器executor和调度器 schedulers。
- 不同调度器的使用
- cron强大的类crontab表达式
- curd task
程序员之间的爱恨情仇——高级的反爬
验证码与js加密。
验证码常见的有:
- 纯数字
- 纯英文
- 英文加数字
- 计算题
- 12306分类选择
- 点选成语
- 手机验证码
- 滑动验证码
- 特殊轨迹拖动
- 拖动旋转图片
验证码这里不考虑上机器学习的话。常用的几种方案:
- 使用cookie来避免一部分验证码
- Tesseract-OCR识别工具
- 使用第三方打码平台
js加密,嗯~~,烧头发的东西。逼着你学前端。
关于js需要掌握的知识:
- 如何处理代码混淆
- 时间戳和哈希
- PyExecJS库的使用
- 浏览器网络分析工具
App逆向,嗯~~,更烧头发。逼着你学移动端。
关于App逆向需要掌握的知识:
- 反编译工具的使用
- Android基本文件结构
- App调试与抓包
- 常见四种加固方式
给老板和自己建一个情报系统——爬虫监控可视化
Gerapy
Gerapy是一款分布式爬虫管理框架,支持 Python 3,基于 Scrapy、Scrapyd、Scrapyd-Client、Scrapy-Redis、Scrapyd-API、Scrapy-Splash、Jinjia2、Django、Vue.js 开发。
Gerapy可以帮助我们:
- 更方便地控制爬虫运行
- 更直观地查看爬虫状态
- 更实时地查看爬取结果
- 更简单地实现项目部署
- 更统一地实现主机管理
- 更轻松地编写爬虫代码(几乎没用,比较鸡肋)
Gerapy使用配置比较简单,基本分为七步:
- Gerapy下载
- 初始化Gerapy
- 初始化数据库
- 运行Gerapy服务
- 访问Gerapy管理界面
- 配置主机
- 配置Projects
Grafana
Grafana是一款采用 go 语言编写的开源应用,主要用于大规模指标数据的可视化展现,是网络架构和应用分析中最流行的时序数据展示工具,目前已经支持绝大部分常用的时序数据库。
官方文档:http://docs.grafana.org/
关于Grafana需要了解的知识:
- 获取部署Grafana
- 登录配置
- 添加配置数据源
- 创建调整面板
- 仪表盘变量功能
- 使用官方模板
开始爬虫前正确的做法应该是:
1.充桃饱网会员去CSDN提问
2.去百度和谷歌搜下这个网站有没有人分享出你要爬数据的API
3.看看电脑网页有没有你要的数据,写点代码测试调查下好不好拿,不管好不好拿,也不要急着就开爬
4.看看有没有电脑能打开的手机网站,一般格式为http://m.xxx.com或
http://mobile.xxxx.com,有的话可以用F12检查抓下包,看下抓取难易程度
5.看看有没有手机App,抓下App的包,看能不能抓到接口,如果新版抓不到,可以尝试旧版本
6.尝试分析app的一些分享外链
7.抓下公众号和小程序的包,看能不能抓到接口
8.都不好弄的话,尝试的话selenium/airtest
9.最高境界:web端破解js 移动端逆向破解
10.放弃抵抗:js爬虫,人肉爬虫
11.终极大杀器–女装卖萌:老板,不要搞我啦😂,不如晚上…
以上调查完成后,再去确定你要选择的爬取方式。