众所周知,爬虫的本质是,模拟浏览器打开网页,获取网页中我们需要的那部分数据。
那首先我们应该清楚,普通一般浏览器打开网页的流程和原理是怎样的?
根据生活经验,我们使用浏览器打开网页的步骤一般是这样的
- 输入想要访问的网址的链接
- 回车之后,略微等待
- 得到想要访问的页面
简单的三步背后,底层逻辑是怎样的呢?
图源:https://www.cnblogs.com/malong1992/p/11404396.html;侵删
以百度网页为例,http://www.baidu.com
我们在浏览器中输入网页地址,并敲下回车;
这时,我们向遥远某处的百度服务器发送了一个请求,说“我想要访问这个网页”。
百度服务器接受到这个请求后,需要做两件事:
- 首先它要读懂请求的内容
- 其次它要核查请求的合法性。如果你是正常合法的浏览器,那OK;否则,直接拒绝你的非法请求;(我百度服务器不是可以随随便欺负的,不是什么阿猫阿狗的要求我都满足的,这样会让我很累,加重我的负担和成本,而且会影响其它合法用户的使用)
随后,百度服务器对我们发送的合法请求进行处理,将所需要的信息传递给浏览器,浏览器把具体的内容再呈现给用户。
上面的整个过程类似于,两个人互相写信。
李白发给杜甫一封书信,说“子美啊,我很想你,你什么时候有空,咱俩出去约一顿?"
杜甫收到这封书信后,他得确认一下是不是真的李白写的,而不是冒牌货,所以他要查看这封信的笔迹、印章等特征。
网图,侵删
如果查看之后,确认无误,就写一封回信,告诉李白”我这周末就有空,不如黄鹤楼叙叙旧?“
网图,侵删
我们通过浏览器访问页面的原理大致便如此,只是李白换成了浏览器,杜甫换成了服务终端,来往书信换成了各种请求和响应。
这个时候大家要问了:
杜甫可以通过这封书信的字迹、印章等特征,辨别到底是不是真的李白;
那对于服务终端而言,它应该如何辨别传来的请求,是否合法呢?
原理一样,是通过请求自身携带的信息,又称为“请求头”来辨别!
请求头一般包括请求的类型(GET还是POST)、发出请求的浏览器类型(User-Agent)等基本信息。
远程服务器通过识别请求头信息,来判断你的请求是否合法;类似于,杜甫通过信件的字迹、印章来辨别是不是真的李白的邀请。
而爬虫的核心问题之一,就是通过“模仿请求头”,来使得远程服务器错认为是合法的浏览器的正常访问需求,从而使得我们能够自如地获取所需要的网页信息。
此时有人或许要问,既然人访问不会出错,为什么一定要让机器模拟呢?
事实上,人工访问发起请求确实可以,但需要一次又一次地在浏览器中输入url,成本很高,效率很低;
当我们应用爬虫,可以把想要请求的地址存在一起,然后用Python代码自动请求,这样人工只需要撰写代码即可,效率大大提升。
参考文献
-
视频资料
-
Python爬虫编程基础5天速成(2021全新合集)Python入门+数据分析
-
2020年Python爬虫全套课程(学完可做项目)【在用】
-
-
文字资料
-
通过浏览器访问网页的原理
-
http请求头【在用】
-
超详细教程:什么是HTTP请求头/响应头【在用】
-
你是如何开始能写 Python 爬虫?【在用】
-