前言
爬虫技术主要用于以下三方面:
-
爬取数据进行市场调研和商业分析:抓取知乎、豆瓣等网站话题内容;分析房产买卖信息及房价趋势;分析招聘网站职位信息与薪资水平。
-
作为机器学习、数据挖掘的原始数据:为推荐系统等模型提供多维度数据支持。
-
爬取优质资源:获取游戏图片、评论文本等数据。
掌握正确的方法,在短时间内做到能够爬取主流网站的数据,其实非常容易实现。建议从一开始就要有一个具体的目标,在目标的驱动下,你的学习才会更加精准和高效。
这里给你一条平滑的、零基础快速入门的学习路径:
- 了解爬虫是怎么实现的
- 实现简单的信息爬取
- 应对特殊网站的反爬虫措施
- Scrapy 与进阶分布式
01 了解爬虫是怎么实现的
大部分爬虫都是按'发送请求——获得页面——解析页面——抽取并储存内容'这样的流程进行,这其实也是模拟了我们使用浏览器获取网页信息的过程。简单来说,向服务器发送请求后,会得到返回的页面,通过解析页面之后,可以抽取想要的那部分信息,并存储在指定的文档或数据库中。在这部分你可以简单了解 HTTP 协议及网页基础知识,比如 POST/GET、HTML、CSS、JS,简单了解即可,不需要系统学习。
02 实现简单的信息爬取
Python 中爬虫相关的包很多:urllib、requests、bs4、scrapy、pyspider 等,建议从 requests+XPath 开始。requests 负责连接网站,返回网页,XPath 用于解析网页,便于抽取数据。如果你用过 BeautifulSoup,会发现 XPath 要省事不少,一层一层检查元素代码的工作,全都省略了。
掌握之后,你会发现爬虫的基本套路都差不多,一般的静态网站根本不在话下,像知乎、豆瓣等网站的公开信息都可以爬取下来。当然如果你需要爬取异步加载的网站,可以学习浏览器抓包分析真实请求或者学习 Selenium 来实现自动化爬取,这样,知乎、时光网、猫途鹰这些动态的网站也基本没问题了。
你还需要了解 Python 的基础知识,比如:
- 文件读写操作:用来读取参数、保存爬取内容
- List(列表)、Dict(字典):用来序列化爬取的数据
- 条件判断(if/else):解决爬虫中的判断是否执行循环和迭代
- 循环(for ……while):用来循环爬虫步骤
03 应对特殊网站的反爬机制
爬虫过程中也会经历一些挑战,比如被网站封 IP、各种奇怪的验证码、UserAgent 访问限制、各种动态加载等等。
遇到这些反爬虫的手段,当然还需要一些高级的技巧来应对,常规的比如访问频率控制、使用代理 IP 池、抓包、验证码的 OCR 处理等等。
比如我们经常发现有的网站翻页后 URL 并不变化,这通常就是异步加载。我们用开发者工具去分析网页加载信息,通常能够得到意外的收获。
往往网站在高效开发和反爬虫之间会偏向前者,这也为爬虫提供了空间,掌握这些应对反爬虫的技巧,绝大部分的网站已经难不到你了。
04 Scrapy 与进阶分布式
使用 requests+XPath 和抓包大法确实可以解决很多网站信息的爬取,但是对于信息量比较大或者需要分模块爬取的话,就会显得寸步难行。后来应用到了强大的 Scrapy 框架,它不仅能便捷地构建 Request,还有强大的 Selector 能够方便地解析 Response,然而最让人惊喜的还是它超高的性能,可以将爬虫工程化、模块化。
学会 Scrapy,自己去尝试搭建了简单的爬虫框架,在做大规模数据爬取的时候能够结构化、工程化地思考大规模的爬取问题,这使你能够从爬虫工程的维度去思考问题。再后来开始逐渐接触到分布式爬虫,这个东西听着挺唬人,但其实就是利用多线程的原理让多个爬虫同时工作,能够实现更高的效率。
其实学习到这里,你基本可以说就是一个爬虫老司机了,外行看很难,但其实并没有那么复杂。因为爬虫这种技术,既不需要你系统地精通一门语言,也不需要多么高深的数据库技术,高效的姿势就是从实际的项目中去学习这些零散的知识点,你能保证每次学到的都是最需要的那部分。
当然唯一麻烦的是,在具体的问题中,如何找到具体需要的那部分学习资源、如何筛选和甄别,是很多初学者面临的一个大问题。
相关技术栈与扩展
下面这些内容是 Python 各个应用方向都必备的基础知识,想做爬虫、数据分析或者人工智能,都得先学会它们。任何高大上的东西,都是建立在原始的基础之上。打好基础,未来的路会走得更稳重。
一、Python 入门
包含计算机基础和 Python 基础。观看零基础学习视频,跟着视频中老师的思路,从基础到深入,还是很容易入门的。


