2.1 认识 HTTP 请求
2.1.1 HTTP 请求的含义
1.2.1 节中讲到下载网页需要实现 HTTP 请求,那么如何实现 HTTP 请求呢?在 Python 中实现 HTTP 请求比较常用的是两个库 - Urllib 库和 Requests 库。
可以简单地把 HTTP 请求理解为从客户端到服务器端的请求消息。也就是说,无论是真正的一个人在操作浏览器还是一个爬虫,当希望从服务器请求服务或信息时,就需要首先向服务器端发出一个请求,然后服务器返回响应,最后连接关闭,这就是 Web 服务的流程。
对编写爬虫来说,认识和理解 HTTP 请求是非常重要的,因为这关系构造爬虫请求的方法。
2.1.2 HTTP 请求信息
当浏览器向 Web 服务器发出请求时,它向服务器传递了一个数据块,也就是请求信息。HTTP 请求信息由请求方法、请求头部和请求正文 3 个部分组成。
这里主要关注请求方法和请求头部,这是与编写爬虫息息相关的。
1. 请求方法
不同的请求方法有不同的作用,下面是最常见的两种请求方法及其作用。
(1)GET 方法
GET 方法请求指定的页面信息,并返回实体主体。
(2)POST 方法
POST 方法向指定资源提交数据进行处理请求(如提交表单或者上传文件),数据被包含在请求体中。POST 请求可能会导致新的资源的建立或已有资源的修改。
从上面的请求方法解释中可以看出,平时打开一个网站一般使用的是 GET 方法,也就是请求了一个页面;如果涉及向网站提交数据(如登录),就用到了 POST 方法。还有一些其他的请求方法,如 HEAD、PUT、DELETE、CONNECT、OPTIONS、TRACE 等,实际编写爬虫中较少用到。
2. 请求头部
请求头部包含许多有关客户端环境和请求正文的有用信息。例如,请求头部可以声明浏览器所用的语言、请求正文的长度等。一般网站服务器最常见的反爬虫措施就是通过读取请求头部的用户代理(User Agent)信息,来判断这个请求是来自正常的浏览器还是爬虫,为了应对服务器的这种反爬虫策略,人们在编写爬虫时经常需要构造请求头部,来伪装成一个正常的浏览器。
可以打开一个网页,实际查看一下浏览器的请求头部。打开 Chrome 或 Firefox 浏览器,在网页空白处单击右键,选择“检查”(见图 2-1)或“查看元素”。

图 2-1 打开 Chrome 浏览器的检查工具
单击“检查”之后,浏览器下方弹出一个子页面,单击子页面上方菜单中的 Network,如图 2-2 所示。

图 2-2 Chrome 浏览器检查页面
现在重新输入一个网址,按回车键打开或者直接刷新一下主页,可以看到子页面下方出现了很多请求的 URL 记录,向上拉动右侧滚动条,找到最上面那条请求记录,可以看到最先发出的那条请求,单击这条记录,右侧会出现请求的详细信息,如图 2-3 所示。

图 2-3 查看请求的详细信息
下面是请求详细信息的前 3 行。
Request URL: https://www.baidu.com/ Request Method: GET Status Code: 200 OK
很明显,这里显示了请求的网址、使用的请求方法和响应状态码等信息。
向下拉右侧滚动条,就能看到 Request Headers 的内容,也就是请求头部,如图 2-4 所示。

图 2-4 查看请求头部
从图中可以看到,请求的 Headers 是以类似字典的形式存在的,这个字典包含了用户代理(User Agent)的信息,例如下面是从浏览器中复制出的这次请求的 User Agent 信息。
Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.167 Safari/537.36
本节展示的通过浏览器检查请求信息的方法,在后面的章节中会经常使用,读者应该掌握这种方法。2.2 节、2.3 节将介绍如何在 Python 中使用 Requests 库和 Urllib 库实现本节所讲的 HTTP 请求。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论