Python 爬虫学习路径
模块
爬虫主要包含三个部分:抓取、分析、存储。
抓取
- requests
http 请求库,一般来说抓取部分只需要它。
如果需要模拟登录,应该还会用到 hashlib 标准库(密码只传 hash)
- tesseract
一个传统的 OCR 文字识别库。如果出现了不能绕过的验证码,可用它做验证码识别。
不过这个库本来是设计用于识别印刷文本的,感觉用到现在越来越变态的验证码识别上,不太合适。
用 tensorflow 深度学习做验证码识别感觉更好一些(https://github.com/JackonYang/captcha-tensorflow)。
分析/清洗
数据清洗,需要的工具是 html/xml/json 解析器
html/xml 解析器,它构建在其他解析器(通常是 lxml)上,提供统一的易用的接口。(但是速度相对会慢一点,所以不适用于有性能要求的爬虫)
- lxml
高性能 html/xml 解析器,而且 api 也设计得很简洁。
标准库的 HTMLParser 反而没见几个人用过。parser 之间的优劣分析见advantages and disadvantages of each parser library - BeautifulSoup
还有个 xmltodict 库,在不要求性能时,可以用,很方便。
存储
格式化的数据,一般都存数据库,所以这部分算是数据库的知识了。
持久化存储有两种选择:非关系数据库 mongodb,和关系数据库 postgrelSQL/MySQL.
消息队列/缓存:redis
ORM 框架(或者单纯用作 数据库连接池):SQLAlchemy
浏览器模拟
针对有复杂验证的网页,或者需要网页截图之类的功能时,requests 就不能满足要求了。这时需要模拟一个浏览器环境。
浏览器自动化控制工具,Python 可通过它的 api 直接控制真实浏览器。
- Headless Chrome/Firefox
即无 UI 模式的浏览器
- splash 一个网页渲染库。如果只是需要截个图啥的,用它就够了,不需要出动 selenium。
进阶
- scrapy:异步爬虫框架
- ip 代理池
- http api: flask
- 日志/消息队列:redis
再进阶
分布式爬虫
-
rq 分布式任务队列(或者 celery)
-
docker+jenkins 部署+持续集成
-
asyncio+aiohttp:异步网络编程
其他
- git: 要好好复习一下。