Python爬虫教程-网络通信(补习,不熟悉的同学赶紧看!)

系列文章目录



前言

在迈入爬虫学习的旅程之前,我们首先需要理解一个核心前提:网络爬虫的工作方式本质上是模拟人类与网络服务器进行通信。因此,为了能够高效、准确地抓取数据并遵守网络协议,我们必须掌握网络通信的基本原理。熟悉HTTP协议、TCP/IP协议等相关技术也是必不可少的,这能让我们在处理请求响应、管理Cookies和Sessions等爬虫关键环节中更加得心应手。同时,我们还需要理解网络通信的安全性和优化原理,确保我们的爬虫行为合法且高效。因此,接下来让我们一起深入学习网络通信的基础知识,为掌握爬虫技术打下坚实的基础。

一、HTTP协议与HTTPS协议

  1. HTTP(HyperText Transfer Protocol,超文本传输协议)是一种用于发布和接收HTML页面的应用层协议。它在互联网上被广泛应用,用于实现网页的访问和数据的传输。

  2. HTTPS(Hypertext Transfer Protocol Secure,超文本传输安全协议)是HTTP协议的安全版本。它在HTTP协议的基础上加入了SSL/TLS协议,对传输的数据进行加密,确保数据在传输过程中的安全性和完整性。

  3. SSL(Secure Sockets Layer,安全套接层)和TLS(Transport Layer Security,传输层安全)是用于保障网络安全传输的协议。它们在传输层对网络连接进行加密,确保数据在Internet上的安全传输。其中,TLS是SSL的升级版,提供了更强大的安全性和性能。

二、HTTP与HTTPS的区别

  1. HTTP的端口号为80,而HTTPS的端口号为443。
  2. HTTP协议传输的数据是未加密的明文数据,容易受到中间人攻击;而HTTPS协议通过SSL/TLS协议对传输的数据进行加密,确保数据的安全性。

三、HTTP的请求与响应

HTTP通信是互联网上的基础交互方式,它由两核心部分组成:客户端请求消息与服务器响应消息。这种通信方式确保了数据的准确传输和网页的正确显示。

HTTP的请求与响应

浏览器发送HTTP请求的过程:

  1. 当用户在浏览器的地址栏中输入一个URL并按下回车键后,浏览器即会向对应的HTTP服务器发送HTTP请求。这些请求主要使用“Get”和“Post”两种方法,以获取或提交数据。
  2. 以输入URLhttp://www.baidu.com为例,浏览器发送一个Request请求,目标是获取该网址的HTML文件。服务器接收请求后,会将相应的Response文件对象发送回浏览器。
  3. 浏览器在接收到HTML文件后,会开始解析其中的内容。如果HTML中引用了其他资源,如图片、CSS文件、JS文件等,浏览器会自动再次发送Request请求去获取这些资源。
  4. 当所有的文件都成功下载并解析后,浏览器会根据HTML的语法结构,将网页完整、准确地显示出来。这也意味着,用户可以看到完整的网页内容并进行交互。

经过这一系列流程,用户得以在浏览器上浏览并互动网页。这也展现了HTTP请求与响应在网页浏览中的核心作用。

四、URL(Uniform Resource Locator,统一资源定位符)

URL是用于完整地描述Internet上网页和其他资源的地址的一种标识方法。它包括协议、主机、端口、路径、查询字符串和锚等部分,用于定位网络资源。

URL的构成
URL的基本格式如下:

scheme://host[:port]/path/.../[?query-string][#anchor]

其中各个组成部分的含义如下:

  • scheme:协议,例如常见的http、https、ftp等。它指定了访问资源所使用的协议。
  • host:服务器的IP地址或者域名。它表示资源所在服务器的主机名或IP地址。
  • port:服务器的端口号。如果未指定端口号,则使用协议的默认端口。例如,HTTP协议的默认端口为80,HTTPS协议的默认端口为443。
  • path:访问资源的路径。它指定了服务器上资源的路径和文件名。
  • query-string:参数,发送给http服务器的数据。它用于传递额外的参数信息,通常以键值对的形式出现。
  • anchor:锚点,用于跳转到网页的指定位置。通过指定锚点,可以直接定位到网页中的特定部分。

以下是几个URL的示例:

  • ftp://192.168.0.116:8080/index:通过FTP协议访问IP地址为192.168.0.116的服务器上的index资源,使用8080端口。
  • http://www.baidu.com:通过HTTP协议访问百度首页,使用默认端口80。
  • http://item.jd.com/11936238.html#product-detail:通过HTTP协议访问京东商品详情页,并跳转到页面中的"product-detail"锚点位置。

请注意,在实际使用中,URL的各个组成部分可能根据具体情况有所变化,例如省略端口号或使用默认端口,以及是否包含查询字符串和锚点等。因此,在构造和使用URL时,需要根据具体需求和协议规范来进行处理。

五、HTTP请求

URL和HTTP是互联网基础技术的两大核心组件。URL用于标识网络资源的位置,而HTTP则用于提交和获取这些资源。

1. 请求格式

HTTP请求,由客户端发往服务器,包含以下四个主要部分:请求行、请求头部、空行、请求数据,具体的格式可参考下图所示的请求报文的一般格式。

HTTP请求格式

以一个典型的HTTP的POST请求为例:

在这里插入图片描述

以上就是一个完整的HTTP的POST请求示例。通过这样的请求,客户端能够明确向服务器表达其需求和能力,从而确保获取到正确、适配的资源。

2. 请求方法

HTTP请求方法是HTTP协议定义的一系列动作,客户端可以使用这些方法来向服务器请求资源或执行某些操作。常见的HTTP请求方法包括GET、POST、HEAD、PUT、DELETE等。这些方法在HTTP协议的不同版本中有些许差别。

  • 在HTTP 0.9版本中,仅支持基本的文本GET功能。
  • 而HTTP 1.0版本完善了请求/响应模型,并新增了POST和HEAD方法。
  • 进一步的,HTTP 1.1版本在1.0的基础上,又新增了OPTIONS、PUT、DELETE、TRACE和CONNECT方法,使得HTTP请求的功能更加丰富和灵活。
  • 至于HTTP 2.0版本(未普及),其请求/响应首部的定义基本没有改变,只是要求所有首部键必须全部小写,并将请求行独立为:method、:scheme、:host、:path这些键值对。

各种请求方法的具体描述如下:

序号方法描述
1GET获取特定资源。请求指定的页面信息,并返回实体主体。
2HEAD与GET方法类似,但服务器在响应中只返回HTTP头部信息,不返回具体的内容。这种方式常用于测试超链接的有效性,以及网站的更新等。
3POST向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
4PUT从客户端向服务器传送的数据取代指定的文档的内容。
5DELETE请求服务器删除指定的页面。
6CONNECTHTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
7OPTIONS允许客户端查看服务器的性能,或者说服务器支持的HTTP请求方法。也可以利用这个方法做一些“诊断”或者服务器性能的测试。
8TRACE回显服务器收到的请求,主要用于测试或诊断。

在实际的应用中,GET和POST方法是最常用的。❗️❗️❗️其中,GET方法主要用于从服务器获取数据,而POST方法主要用于向服务器提交数据。

GET和POST方法的主要区别在于:

  1. GET方法的请求参数会显示在浏览器的地址栏中,而POST方法的请求参数则包含在请求体中。
  2. GET方法适用于请求数据量较小且无需保密的场景,而POST方法则适用于请求数据量较大且需要保密的场景。尤其需要注意的是,避免使用GET方法提交敏感信息,如用户名和密码,因为这可能导致这些信息在浏览器的地址栏中暴露,引发安全问题。

3. 常用请求报头概览

在HTTP请求中,请求报头包含着许多重要的信息,以下是一些常用的请求报头及其简要说明。

  1. Host
    作用:指定被请求资源的Internet主机和端口号。
    内容:通常与URL中的Web名称和端口号相对应。
  2. Connection
    作用:表示客户端与服务器之间的连接类型。
    内容:客户端可发起Connection:keep-alive的请求,若服务器支持,将回复相同类型的响应,保持连接;若不支持,则响应为Connection:close,关闭连接。此报头有助于重用连接,减少资源消耗。
  3. Upgrade-Insecure-Requests
    作用:自动将http资源升级为https请求,确保页面安全。
    内容:在加载http资源时,此报头会助其自动替换为https请求,避免安全警报。
  4. User-Agent
    作用:标识客户浏览器的名称。
    内容:包含浏览器类型、版本等信息。
  5. Accept
    作用:指明客户端可接受的MIME文件类型。
    内容:可以是多种文件类型,如Accept: */*表示接受任何类型,Accept: image/gif表示仅接受GIF格式。
  6. Referer
    作用:标识产生请求的网页来源。
    内容:用于追踪用户从哪个页面跳转到当前页面,可用于防盗链等安全措施。
  7. Accept-Encoding
    作用:指明浏览器可接受的编码方式。
    内容:包含多种编码方式,如gzip压缩,有助于减少下载时间。
  8. Accept-Language
    作用:标识客户端接受的语言种类。
    内容:包含语言偏好信息,服务器据此返回合适语言的网页内容。例如,Accept-Language: zh-CN,en;q=0.5表示优先接受简体中文,其次是英文。
  9. Accept-Charset(字符编码)
    作用:标识客户端所能解析的字符编码集,以便服务器能够选择适当的编码方式发送数据。
    内容:Accept-Charset报头可以携带多个字符编码选项,例如:Accept-Charset: utf-8, gbk, gb2312。其中utf-8为通用字符编码,适用于多语言文本;gbk和gb2312则为中文字符编码,用于支持简体中文文本。若未设置该报头,服务器默认使用ISO-8859-1(Latin-1)编码。
  10. Cookie
    作用:用于在客户端与服务器之间传递会话和偏好信息。
    内容:Cookie报文头携带了存储在客户端的Cookie信息,这些信息会在每次请求时自动发送给服务器,以便服务器识别用户、保持会话状态。通过这种方式,服务器能够追踪用户的浏览习惯、保存用户登录状态等,以实现个性化服务和提高用户体验。
  11. Content-Type
    作用:指明HTTP请求正文中数据的媒体类型,确保服务器正确解析请求内容。
    内容:在HTTP请求中,特别是POST方法,Content-Type报头非常关键。它告知服务器请求正文的格式和编码方式。例如,Content-Type为“application/json; charset=utf-8”时,表示请求体中的数据是以UTF-8编码的JSON格式数据。服务器依赖此报头来正确解析和处理请求数据,确保数据的完整性和准确性。

六、HTTP响应

服务端HTTP响应是客户端发送HTTP请求后,服务器返回的响应。HTTP响应包含四个部分:状态行、消息报头、空行和响应正文。

在这里插入图片描述

例如,下面是一个HTTP响应的示例:
在这里插入图片描述

HTTP/1.1 200 OK这是一个状态行,其中HTTP/1.1表示HTTP协议版本,200表示响应状态码,OK表示状态码的描述。

接下来是消息报头,它包含有关响应的元信息,例如:

Server: Tengine 表示服务器的类型;
Connection: keep-alive 表示连接的方式;
Date: Wed, 30 Nov 2016 07:58:21 GMT 表示响应的日期和时间;
Cache-Control: no-cache 和 Pragma: no-cache 表示缓存的策略;
Content-Type: text/html;charset=UTF-8 表示响应正文的MIME类型和字符编码;
Keep-Alive: timeout=20 表示keep-alive连接的超时时间;
Vary: Accept-Encoding 表示服务器支持的内容编码;
X-NWS-LOG-UUID: bd27210a-24e5-4740-8f6c-25dbafa9c395 是一个自定义的报头,可能是用于日志追踪的标识;
Content-Length: 180945 表示响应正文的长度。

最后是响应正文,即返回给客户端的HTML文档,这里用“<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ....”表示。在实际应用中,响应正文通常包含具体的数据或页面内容,这里是简化展示。

通过了解HTTP响应的结构和各个部分的意义,我们可以更好地理解和处理服务器的响应,从而更有效地进行网络爬虫的学习和实践。

1. 响应状态码

响应状态码是由三位数字组成的代码,用于表示客户端发送的HTTP请求的处理结果。第一个数字定义了响应的类别。以下是常见的响应状态码及其描述:

状态码范围类别描述常见状态码说明
100~199信息服务器已接收请求的部分,客户端应继续请求或忽略它,如果已经完成了请求。100 Continue服务器仅接收到部分请求,但客户端应继续发送剩余部分。
200~299成功请求已成功被服务器接收、理解和接受。200 OK请求成功,服务器成功处理了请求。
201 Created请求完成,并导致了一个新的资源被创建。
204 No Content服务器成功处理了请求,但没有返回任何内容。
300~399重定向要完成请求,需要进一步的操作。通常,这些状态码用来重定向。301 Moved Permanently请求的网页已永久移动到新位置。
302 Found请求的网页临时移动到新位置。
304 Not Modified客户端可使用缓存版本,请求的资源未修改。
400~499客户端错误请求包含语法错误或无法完成。400 Bad Request服务器无法理解请求的语法。
401 Unauthorized请求需要身份验证。
403 Forbidden服务器理解请求,但拒绝执行。
404 Not Found服务器无法找到请求的网页。
500~599服务器错误服务器在处理请求时发生了错误。500 Internal Server Error服务器遇到未知错误,无法完成请求。
503 Service Unavailable服务器暂时无法处理请求。

这些响应状态码在使用HTTP协议进行通信时起到重要的作用。通过状态码,客户端能够了解请求的处理结果,并根据需要采取适当的操作。

2. Cookie 和 Session:

在网络交互中,服务器和客户端之间的通信通常是短暂的,每次请求/响应结束后连接便断开。这意味着在下一次请求时,服务器会将客户端视为全新的用户。然而,为了维护服务器与客户端之间的连续交互,并让服务器知道多个请求来自同一用户,我们需要在某个地方保存客户端的信息。这就需要使用CookieSession

Cookie是一种存储在客户端的信息,它用于确定用户的身份。当客户端首次访问服务器时,服务器可以在响应中附带一个Cookie,并将其存储在客户端的浏览器中。之后,每当客户端发起请求时,浏览器会自动附带该Cookie信息给服务器,从而使服务器能够识别出这是之前访问过的用户。

举个例子,当我们在网上购物时,浏览器会保存一个包含购物车信息的Cookie。这样,在浏览不同页面或关闭浏览器再次打开后,服务器仍然能够知道我们的购物车中有什么物品,因为这些信息被保存在了客户端的Cookie中。

与Cookie不同,Session是存储在服务器端的信息,它也用于确定用户的身份。当客户端首次访问服务器时,服务器会为该客户端创建一个唯一的Session,并为其分配一个Session ID。这个ID将被发送给客户端并存储在Cookie中。在后续的请求中,客户端会将Session ID发送给服务器,服务器根据这个ID来查找对应的Session,从而识别用户的身份。

通过使用Cookie和Session,服务器能够跟踪和识别不同的客户端用户,以实现个性化的服务、会话管理以及其他功能,提升用户体验和网站性能。

总结

以上就是今天要分享的内容,本文仅仅简单介绍了网络通信的基本知识,若大家有兴趣可以系统性的了解下网络通信的内容。大家在学完后,请关注、收藏、点赞,谢谢!

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值