本篇 Chat 涉及的全部代码都已上传到 GitHub:
一、什么是爬虫
在真正讲爬虫相关技术之前,我想简单说一下什么是爬虫。这里就不照搬定义了,没多大意思。
你还记得当你浏览网页时,具体发生了什么事吗?
你打开了浏览器。
你在浏览器标签页的地址栏上,键入了你想访问的地址,比如 https://www.baidu.com。
你敲击了回车。
浏览器获悉了你想访问的地址,并向百度的服务器发起了此次请求。
浏览器获取了百度服务器返回的结果,并进行了渲染。
你看到了百度的首页。
上面这个过程符合我们正常的经历,所以理解起来应该没有什么问题。但是第 5 点说得还是太笼统了,我们重新组织一下语言:
1. 你打开了浏览器。
2. 你在浏览器标签页的地址栏上,键入了你想访问的地址,比如 https://www.baidu.com。
3. 你敲击了回车。
4. 浏览器获悉了你想访问的地址,并向百度的服务器发起了此次请求。
5. 百度的服务器接收到了浏览器的请求,计算之后,返回了百度首页的源码。
6. 浏览器接收到了百度首页的源码,这是一个 html 文档。
7. 浏览器对此 HTML 进行了解析,发现它还引用了一些图片。比如
JS 文件,比如
CSS 文件,比如
等静态文件。这些东西在你“右键 -> 查看网页源代码”的时候都可以看到。有的网页甚至还会引用新的 iframe,不过这里没有,就不说了。
8. 为了保证你能够看到正确的图片、样式,并以正确的方式响应你的操作,浏览器开始向相应服务器(注意,这里不一定还是百度的服务器了,目标服务器由资源的 URL 决定)发起请求。
9. 目标服务器收到请求,并返回相关资源。
10. 浏览器收到了全部资源,完成了对页面的渲染。
11. 你看到了正确的百度首页。
那么,爬虫是什么呢?
我们可以把爬虫当成一个机器人,它的任务是不断地、自动地从网络上获取我们需要的相关信息,并以我们期望的形式将信息保存下来。比如,从 CSDN 上下载一些 Python 相关的文章,从豆瓣上下载图书信息,从图库下载图片等等。
对应于人类浏览网页的过程,我们看一下爬虫是怎么浏览网页的:
为爬虫选择一个用于进行 HTTP 请求的类库,相当于人类使用的浏览器。这里,我们以神器 requests 为例。
确定想要访问的网址,我们仍然以百度首页 https://www.baidu.com 为例。
爬虫通过 requests 类库,对 https://www.baidu.com 发起请求。
百度的服务器接收到请求,返回 https://www.baidu.com 的源码。
爬虫接收到百度首页的源码,对源码内容进行解析,获取我们关心/需求的数据。需要注意的是,除非是需要特定资源,否则爬虫一般不会请求源码中引用的静态文件,这是爬虫获取信息的速度比人工访问快的原因之一,因为它直接放弃了无用资源,节省了加载时间。
假设我们关心从百度首页能够跳转到哪些页面,我们关心的内容就是网页源码中的 a 标签,准确来说,是 a 标签中的 href 属性的值。我们在第 5 步已经对源码进行了解析,并获取了相关数据,此时,我们选择合适的方式将数据保存下来(比如,写入文件、写入数据库等)。
当然了,上面这个是访问一次特定网页的逻辑,实际爬虫编写中逻辑会更加复杂。我们这里先不讨论,后面会举例说明,我想这个过程已经能让你直观感受到爬虫是怎么工作的了。
二、开始爬虫前的准备工作
在正式编写爬虫之前,我们还需要对一些基础的工具做出介绍,并在一定程度上达成共识。
2.1 操作系统的选择
目前用的比较多的 PC 操作系统无非以下三种:
Linux 系列发行版本
Windows 系列
macOS 系列
emmm,我比较穷,从没买过 MacBook,自然也没使用过 macOS。秉持着“没有经历就没有发言权”的原则,本次讨论直接排除 macOS 选项。
就 Linux 和 Windows 而言,我更推荐 Linux,理由如下:
选择 Linux,你会有更多对计算机的掌控力,你可以做更多个性化的定制。你不用担心计算机来指挥你,比如“关机并更新”、“重启并更新”。
Linux 中,依赖、环境的安装相比于 Windows 更容易。且有些依赖,可能只支持 Linux。
因为终端的存在,在 Linux 下开发比 Windows 更惬意。
有些程序在 Linux 下运行更快。(滑稽.jpg)
当然,以上只是我的个人看法,不要求大佬们认同我的观点。反正自从换了 Linux 开发之后,我是再也不想碰 Windows 了。求同存异吧。
对于从 Windows 切换为 Linux,有些问题是不可避免的,比如:
中文输入法
即时通讯工具,QQ/TIM/ 微信
办公的话可能需要钉钉
足够好用的 IDE
诚然,Linux 的生态和 Windows 比起来,还是有些薄弱。比如在 Ubuntu 上装个搜狗输入法,有时候可能就要捯饬半天。不过,后来我发现了一个神器,强烈安利一下深度科技的 Deepin 操作系统。
Deepin 也是一个 Linux 发行版本,国内公司做的,所以也更符合国人的习惯。自带搜狗输入法,QQ、微信是通过 Wine 定制适配的,可以通过应用商店一键安装,大部分在 Windows 下常用的软件在 Deepin 中都能够找到,或找到其替代品。而且必须夸一句,Deepin 的桌面系统做的真的挺好看。
正常来说,小白也是完全可以从 Windows 无缝切换到 Deepin 上来的。而且就作为开发环境而言,Deepin 是完全满足需求的。当然,它也存在着不少缺点,比如比较吃内存、系统稳定性稍差等。作为开发机是没有问题的,但请千万不用作为生产环境!
如果想要了解的话,可以访问 Deepin 的官网: