前言
Python 爬虫是老生常谈的话题。在大数据时代,它在兼职接单、数据收集等场景应用广泛。业余玩玩小意思,若想学精学深,需下一番功夫。
爬虫能力按层次大致分为初级、中级、高级、更高级四个水平。学海无涯,可朝着目标奋斗。
一、初级爬虫
掌握 Python 的语法和一些常用库的使用。
【初级爬虫的技能要求】
- Python 语言基础
- requests(请求相关)
- lxml(解析相关)
- XPath(解析相关)
- BeautifulSoup(解析相关)
- PyQuery(解析相关)
- MySQL(数据库)
- MongoDB(数据库)
- Elasticsearch
- Kafka(消息队列相关)
这个阶段主要掌握 Python 语法基础、常用库的使用。请求库一般 Requests 能应付大部分简单网站的爬取(无反爬机制前提下)。Selenium 主要用于模拟真实浏览器访问 URL,配合 PhantomJS 抓取 JS 加载数据的网页。
解析常用到 XPath、BeautifulSoup、PyQuery 或正则表达式。初级的话熟练两三种解析库基本够用。正则一般用于满足特殊需求或提取其他解析器提取不到的数据。
没有基础的话,Python 入门知识点不少。除了 Python,基础的计算机网络知识、CSS、HTML 等都需要补充学习。明确学习目标,掌握学习节奏很重要。
初级水平的爬虫重在基础,能爬基本网站,碰到有反爬的网站就不太行了。
二、中级爬虫
职业爬虫师的基本水平。
【中级爬虫的技能要求】
- Ajax(能通过 Ajax 接口获取数据)
- Puppeteer(基于 JS 的爬虫框架,可直接执行 JS)
- Pyppeteer(基于 Puppeteer 开发的 python 版本,需要 python 异步知识)
- Selenium(常见的自动化工具,支持多语言)
- Splash(JavaScript 渲染服务)
- 多进程(python 多任务基础)
- 多线程(python 多任务基础)
- 协程(python 多任务基础)
- fiddler(抓包工具)
- mitmproxy(中间人代理工具)
- appium(自动化工具)
- adb(安卓 adb 工具)
- Charles(抓包工具)
这个阶段是爬虫技能的升级,Ajax、多线程、多进程等是重点学习内容。现在很多网站数据通过接口传输或 JSON 数据经 JavaScript 渲染得出。若用 requests 行不通,需分析 Ajax 知道接口调用方式后模拟。
如果接口带有加密参数(如 token、sign),需分析网站 JavaScript 逻辑。简单方法死抠代码,但费时间精力。也可用 Puppeteer、Selenium、Splash 模拟浏览器方式爬取,避免死抠逻辑。
单线程爬虫速度慢,利用多进程、多线程、协程能大幅提升速度,相关库有 threading 和 multiprocessing。注意别把对方网站搞挂,使用 aiohttp、gevent、tornado 等提升并发。同时注意别被反爬干掉,悠着点爬。
建议找有针对性的项目练手,独立敲代码加深记忆和巩固。
三、高级爬虫
进一步提高爬取效率。
【高级爬虫的技能要求】
- RabbitMQ(消息队列相关)
- Celery(消息队列相关)
- Kafka(消息队列相关)
- Redis(缓存数据库,其实 mongodb 也可以充当这个角色)
- Scrapy-Redis(scrapy 的 redis 组件)
- Scrapy-Redis-BloomFilter(scrapy 的布隆过滤器)
- Scrapy-Cluster(分布式解决方案)
- 验证码破解
- IP 代理池
- 用户行为管理
- cookies 池
- token 池
- sign
- 账号管理
能达到这个层次,一般赚外快不在话下。这个阶段主要是两个重点:分布式爬虫和应对反爬的处理技巧。


