前言
Python 爬虫是大数据时代的重要技能,广泛应用于兼职接单、数据收集等领域。业余玩玩容易,想要学精学深则需要系统学习。爬虫能力通常分为初级、中级、高级及更高一级四个水平。
一、初级爬虫
掌握 Python 的语法和一些常用库的使用。虽然是零基础上手编程,基础语法还是要认真去学。
【初级爬虫的技能要求】
- Python【语言基础】
- requests【请求相关】
- lxml【解析相关】
- XPath【解析相关】
- BeautifulSoup【解析相关】
- PyQuery【解析相关】
- MySQL【数据库】
- MongoDB【数据库】
- Elasticsearch
- Kafka【消息队列相关】
这个阶段最主要的就是掌握 Python 语法基础、常用库的使用。请求库的话一般 Requests 能应付大部分简单网站的爬取,当然是在没有反爬机制的前提下。Selenium 主要是用它来模拟真实浏览器对 URL 进行访问,从而对网页进行爬取,往往要配合 PhantomJS 使用。解析常用到 XPath、BeautifulSoup、PyQuery 或者正则表达式。初级的话能够熟练两三种解析库基本也够用了。正则一般用来满足特殊需求、以及提取其他解析器提取不到的数据。
除了 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 来模拟浏览器的方式来爬取,这样就不用死抠 Ajax 和一些 JavaScript 逻辑的过程,提取数据自然就简单一点。单线程的爬虫简单是简单,但是速度慢啊!利用多进程、多线程、协程能大幅度提升爬虫的速度,相关的库有 threading 和 multiprocessing。不过需要注意的一点是别把人家网站搞挂了!用 aiohttp、gevent、tornado 等等,基本上你想搞多少并发就搞多少并发,速度是成倍提上了。同时也注意一下自己的爬虫别被反爬干掉了,总之悠着点爬!
三、高级爬虫
进一步提高爬取效率。
【高级爬虫的技能要求】
- RabbitMQ【消息队列相关】
- Celery【消息队列相关】
- Kafka【消息队列相关】
- Redis【缓存数据库 -----》其实 mongodb 也可以充当这个角色】
- Scrapy-Redis【scrapy 的 redis 组件】
- Scrapy-Redis-BloomFilter【scrapy 的布隆过滤器】
- Scrapy-Cluster【分布式解决方案】
- 验证码破解
- IP 代理池
- 用户行为管理
- cookies 池
- token 池
- sign


