咸鱼笔记:Python爬虫基础【一】
作者:互联网
文章目录
前言
在学习爬虫之前,还需要了解一些基础知识,如 HTTP 原理、网页的基础知识、爬虫的基本原理、Cookies 的基本原理等。
HTTP 基本原理
一、URI和URL
URI: Uniform Resource Identifier,统一资源标志符。
URL: Universal Resource Locator,统一资源定位符。
URN: Universal Resource Name,统一资源名称。
URL格式:
http://host[:post][abs_path]
- http表示传输协议是http协议;
- host表示的是主机域名或IP地址;
- port指端口号;
- abs_path指要请求的资源的路径。
比如 https://github.com/favicon.ico 是 GitHub 的网站图标链接,它是一个 URL,也是一个 URI。即有这样的一个图标资源,我们用 URL/URI 来唯一指定了它的访问方式,这其中包括了访问协议 https、访问路径(/ 即根目录)和资源名称 favicon.ico。通过这样一个链接,我们便可以从互联网上找到这个资源,这就是 URL/URI。
URL是URI的子集,所有的URL都是URI,但不是每个URI都是URL,还有可能是URN,URI包含URL,URI还包含了另一个子集叫URN。
URI强调的是给资源标记命名,URL强调的是给资源定位,URL比URI包含信息更多。
目前的互联网中,URN 用得非常少,所以几乎所有的 URI 都是 URL,一般的网页链接我们可以称为 URL。
二、超文本
超文本: 英文名为hypertext,一般在浏览器中显示的网页就是超文本解析出来的,其网页源代码为HTML代码,里面包含了构成整个HTML的一系列标签,标签内又包含了文字或图片等信息,浏览器解析这些标签内容显示出来就是平常看到的网页,HTML是超文本的格式之一。
三、HTTP 和 HTTPS
一般URL中的开头都会有http或者https,这是访问资源时的网络协议类型,常见的还有其他的网络协议,如ftp,sftp,smb等。爬虫中最常用的都是http或https协议类型的。
HTTP: Hyper Text Transfer Protocol,超文本传输协议。是互联网上应用最为广泛的一种网络协议,用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,能保证高效而准确地传送超文本文档。目前广泛使用的是 HTTP 1.1 版本。
HTTPS: Hyper Text Transfer Protocol over Secure Socket Layer,是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
它的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。
四、HTTP请求过程
当在浏览器中输入一个 URL,回车之后便会在浏览器中显示页面内容。实际上,这个过程是浏览器向网站所在的服务器发送了一个请求,网站服务器接收到这个请求后进行处理和解析,然后返回对应的响应,接着传回给浏览器。
响应里包含了页面的源代码等内容,浏览器再对其进行解析,便将网页呈现了出来。
过程如下:
- 浏览器输入 URL,浏览器发起一个请求,DNS 进行域名解析 URL 对应的 IP 地址。
- 解析出 IP 地址后,根据该 IP,建立服务器指定端口80 的TCP 连接。
- HTTP 服务器端收到请求后,发送一个状态行 HTTP/1.1 200 和响应消息。
- 客户端与服务器断开 TCP 连接。
- .浏览器将响应内容信息显示出来。
Network组件查看请求和响应
浏览器的开发者模式下的 Network 监听组件可以查看并显示访问当前请求网页时发生的所有网络请求和响应。
打开浏览器,输入该 URL 访问它,按f12或右键选中检查项,即可打开浏览器的开发者工具,点击顶部的Network可以看到出现一个个条目,每个条目就代表一次发送请求和接收响应的过程。
各列的含义解释:
列数 | 名称 | 说明 |
---|---|---|
1 | Name | 请求的名称,一般会将 URL 的最后一部分内容当作名称。 |
2 | Status | 响应的状态码,这里显示为 200,代表响应是正常的。通过状态码,我们可以判断发送了请求之后是否得到了正常的响应。 |
3 | Type | 请求的文档类型。这里为 document,代表我们这次请求的是一个 HTML 文档,内容就是一些 HTML 代码。 |
4 | Initiator | 请求源。用来标记请求是由哪个对象或进程发起的。 |
5 | Size | 从服务器下载的文件和请求的资源大小。如果是从缓存中取得的资源,则该列会显示 from cache。 |
6 | Time | 发起请求到获取响应所用的总时间。 |
7 | Waterfall | 网络请求的可视化瀑布流。 |
五、HTTP请求
1.请求方法
常见的请求方法有两种:GET 和 POST。
在浏览器中输入 URL 并访问,这便发起了一个 GET 请求,请求的参数会直接包含到 URL 里。例如:在百度中搜索 Python,这就是一个 GET 请求,链接为 https://www.baidu.com/s?wd=Python,其中 URL 中包含了请求的参数信息,这里参数 wd 表示要搜寻的关键字。
POST 请求大多在表单提交时发起。比如,对于一个登录表单,输入用户名和密码后,点击 “登录” 按钮,这通常会发起一个 POST 请求,其数据通常以表单的形式传输,而不会显示在 URL 中。
GET 和 POST 请求方法的区别:
- GET是从服务器上获取数据,POST是向服务器传送数据。
- GET 请求中的参数包含在 URL 里,数据可以在 URL 中看到,而 POST 请求中的参数不会显示在 URL ,POST通过表单形式传输的,数据包含在请求体中。
其他请求方法:
方法 | 说明 |
---|---|
GET | 请求指定的页面信息,并返回实体主体。 |
HEAD | 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头 |
POST | 向指定资源提交表单或者上传文件,数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。 |
PUT | 从客户端向服务器传送的数据取代指定的文档的内容。 |
DELETE | HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。 |
OPTIONS | 允许客户端查看服务器的性能。 |
TRACE | 回显服务器收到的请求,主要用于测试或诊断。 |
PATCH | 是对 PUT 方法的补充,用来对已知资源进行局部更新 。 |
CONNECT | HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。 |
2.请求的网址
请求的网址,为统一资源定位符 URL,它可以唯一确定我们想请求的资源。
3.请求头
请求头,用来说明服务器要使用的附加信息。
常用头信息:
名称 | 说明 |
---|---|
Accep | 指定客户端能够接收的内容类型。 |
Accept-Language | 浏览器可接受的语言。 |
Accept-Encoding | 指定浏览器可以支持的web服务器返回内容压缩编码类型。 |
Host | 用于指定请求资源的主机 IP 和端口号,其内容为请求 URL 的原始服务器或网关的位置。 |
Cookie | 网站为了辨别用户进行会话跟踪而存储在用户本地的数据。它的主要功能是维持当前访问会话。HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给服务器。 |
Referer | 先前网页的地址,当前请求网页紧随其后,即请求来源。 |
User-Agent | 可以使服务器识别客户使用的操作系统及版本、浏览器及版本等信息。在做爬虫时加上此信息,可以伪装为浏览器。 |
Content-Type | 也叫互联网媒体类型(Internet Media Type)或者 MIME 类型,在 HTTP 协议消息头中,它用来表示具体请求中的媒体类型信息。 |
请求头是请求的重要组成部分,在写爬虫时,大部分情况下都需要设定请求头。
4.请求体
Request如果是post才有请求体,请求体一般承载的内容是 POST 请求中的表单数据,而对于 GET 请求,请求体则为空。
需要注意 Request Headers 中指定 Content-Type 为 application/x-www-form-urlencoded。只有设置 Content-Type 为 application/x-www-form-urlencoded,才会以表单数据的形式提交。
另外,我们也可以将 Content-Type 设置为application/json 来提交 JSON 数据,或者设置为 multipart/form-data 来上传文件。
Content-Type 和 POST 提交数据方式的关系:
内容 | 说明 |
---|---|
Content-Type | 提交数据的方式 |
application/x-www-form-urlencoded | 表单数据 |
multipart/form-data | 表单文件上传 |
application/json | 序列化 JSON 数据 |
text/xml | XML 数据 |
在爬虫中,如果要构造 POST 请求,需要使用正确的 Content-Type,并了解各种请求库的各个参数设置时使用的是哪种 Content-Type,不然可能会导致 POST 提交后无法正常响应。
六、HTTP响应
1.响应状态码
响应状态码表示服务器的响应状态。
常见的错误代码及错误原因:
状态码 | 说明 | 详情 |
---|---|---|
100 | 继续 | 请求者应当继续提出请求。服务器已收到请求的一部分,正在等待其余部分 |
101 | 切换协议 | 请求者已要求服务器切换协议,服务器已确认并准备切换 |
200 | 成功 | 服务器已成功处理了请求 |
201 | 已创建 | 请求成功并且服务器创建了新的资源 |
202 | 已接受 | 服务器已接受请求,但尚未处理 |
203 | 非授权信息 | 服务器已成功处理了请求,但返回的信息可能来自另一个源 |
204 | 无内容 | 服务器成功处理了请求,但没有返回任何内容 |
205 | 重置内容 | 服务器成功处理了请求,内容被重置 |
206 | 部分内容 | 服务器成功处理了部分请求 |
300 | 多种选择 | 针对请求,服务器可执行多种操作 |
301 | 永久移动 | 请求的网页已永久移动到新位置,即永久重定向 |
302 | 临时移动 | 请求的网页暂时跳转到其他页面,即暂时重定向 |
303 | 查看其他位置 | 如果原来的请求是 POST,重定向目标文档应该通过 GET 提取 |
304 | 未修改 | 此次请求返回的网页未修改,继续使用上次的资源 |
305 | 使用代理 | 请求者应该使用代理访问该网页 |
307 | 临时重定向 | 请求的资源临时从其他位置响应 |
400 | 错误请求 | 服务器无法解析该请求 |
401 | 未授权 | 请求没有进行身份验证或验证未通过 |
403 | 禁止访问 | 服务器拒绝此请求 |
404 | 未找到 | 服务器找不到请求的网页 |
405 | 方法禁用 | 服务器禁用了请求中指定的方法 |
406 | 不接受 | 无法使用请求的内容响应请求的网页 |
407 | 需要代理授权 | 请求者需要使用代理授权 |
408 | 请求超时 | 服务器请求超时 |
409 | 冲突 | 服务器在完成请求时发生冲突 |
410 | 已删除 | 请求的资源已永久删除 |
411 | 需要有效长度 | 服务器不接受不含有效内容长度标头字段的请求 |
412 | 未满足前提条件 | 服务器未满足请求者在请求中设置的其中一个前提条件 |
413 | 请求实体过大 | 请求实体过大,超出服务器的处理能力 |
414 | 请求 URI 过长 | 请求网址过长,服务器无法处理 |
415 | 不支持类型 | 请求格式不被请求页面支持 |
416 | 请求范围不符 | 页面无法提供请求的范围 |
417 | 未满足期望值 | 服务器未满足期望请求标头字段的要求 |
500 | 服务器内部错误 | 服务器遇到错误,无法完成请求 |
501 | 未实现 | 服务器不具备完成请求的功能 |
502 | 错误网关 | 服务器作为网关或代理,从上游服务器收到无效响应 |
503 | 服务不可用 | 服务器目前无法使用 |
504 | 网关超时 | 服务器作为网关或代理,但是没有及时从上游服务器收到请求 |
505 | HTTP 版本不支持 | 服务器不支持请求中所用的 HTTP 协议版本 |
2.响应头
响应头包含了服务器对请求的应答信息。
常用头信息:
名称 | 说明 |
---|---|
Date | 标识响应产生的时间。 |
Last-Modified | 指定资源的最后修改时间。 |
Content-Encoding | 指定响应内容的编码。 |
Server | 包含服务器的信息,比如名称、版本号等。 |
Content-Type | 文档类型,指定返回的数据类型是什么,如 text/html 代表返回 HTML 文档,application/x-javascript 则代表返回 JavaScript 文件,image/jpeg 则代表返回图片。 |
Set-Cookie | 设置 Cookies。响应头中的 Set-Cookie 告诉浏览器需要将此内容放在 Cookies 中,下次请求携带 Cookies 请求。 |
Expires | 指定响应的过期时间,可以使代理服务器或浏览器将加载的内容更新到缓存中。如果再次访问时,就可以直接从缓存中加载,降低服务器负载,缩短加载时间。 |
3.响应体
响应中最重要为响应体。响应的正文数据都在响应体中,比如请求网页时,它的响应体就是网页的 HTML 代码;请求一张图片时,它的响应体就是图片的二进制数据。
爬虫请求网页后,要解析的内容就是响应体,所以响应体很重要。
网页的源代码,也就是响应体的内容,它是解析的目标。
在做爬虫时,主要通过响应体得到网页的源代码、JSON 数据等,然后从中做相应内容的提取。
总结
以上就是本章内容,本章了解了 HTTP 的基本原理,大概了解了访问网页时背后的请求和响应过程。
涉及的知识点需要好好掌握,后面分析网页请求时会经常用到。希望本章对其他初学者有所帮助。
标签:HTTP,请求,响应,Python,爬虫,URL,咸鱼,服务器,浏览器 来源: https://blog.csdn.net/Aiy5249/article/details/114476606