Python 爬虫学习路径

模块

爬虫主要包含三个部分:抓取、分析、存储。

抓取

  1. requests

http 请求库,一般来说抓取部分只需要它。
如果需要模拟登录,应该还会用到 hashlib 标准库(密码只传 hash)

  1. tesseract

一个传统的 OCR 文字识别库。如果出现了不能绕过的验证码,可用它做验证码识别。
不过这个库本来是设计用于识别印刷文本的,感觉用到现在越来越变态的验证码识别上,不太合适。
用 tensorflow 深度学习做验证码识别感觉更好一些(https://github.com/JackonYang/captcha-tensorflow)。

分析/清洗

数据清洗,需要的工具是 html/xml/json 解析器

  1. BeautifulSoup

html/xml 解析器,它构建在其他解析器(通常是 lxml)上,提供统一的易用的接口。(但是速度相对会慢一点,所以不适用于有性能要求的爬虫)

  1. lxml

高性能 html/xml 解析器,而且 api 也设计得很简洁。

标准库的 HTMLParser 反而没见几个人用过。parser 之间的优劣分析见advantages and disadvantages of each parser library - BeautifulSoup

还有个 xmltodict 库,在不要求性能时,可以用,很方便。

存储

格式化的数据,一般都存数据库,所以这部分算是数据库的知识了。

持久化存储有两种选择:非关系数据库 mongodb,和关系数据库 postgrelSQL/MySQL.

消息队列/缓存:redis

ORM 框架(或者单纯用作 数据库连接池):SQLAlchemy

浏览器模拟

针对有复杂验证的网页,或者需要网页截图之类的功能时,requests 就不能满足要求了。这时需要模拟一个浏览器环境。

  1. Selenium

浏览器自动化控制工具,Python 可通过它的 api 直接控制真实浏览器。

  1. Headless Chrome/Firefox

即无 UI 模式的浏览器

  1. splash 一个网页渲染库。如果只是需要截个图啥的,用它就够了,不需要出动 selenium。

进阶

  1. scrapy:异步爬虫框架
  2. ip 代理池
  3. http api: flask
  4. 日志/消息队列:redis

再进阶

分布式爬虫

  1. rq 分布式任务队列(或者 celery)

  2. docker+jenkins 部署+持续集成

  3. asyncio+aiohttp:异步网络编程

其他

  1. git: 要好好复习一下。
posted @ 2018-07-08 10:08  於清樂  阅读(820)  评论(0编辑  收藏  举报