python爬虫初识

一、什么互联网

在这里插入图片描述

互联网(Internet)是全球范围内最大的计算机网络,它将数以百万计的私人、公共、学术、商业和政府网络通过一系列标准通信协议(如TCP/IP)连接起来形成的一个庞大的国际网络。

互联网的起源可以追溯到1969年,当时美国国防部高级研究计划局(ARPA)创建了ARPANET,用于军事和科研目的。经过几十年的发展,互联网已经渗透到社会的各个角落,成为现代社会信息交流、商务活动、教育、娱乐等不可或缺的基础设施。

互联网与传统行业结合,催生了新的经济社会发展形态——“互联网+”。这一概念最早由易观国际于2012年提出,旨在通过互联网平台和信息通信技术,将互联网与传统行业深度融合,从而创造新的发展生态。这种模式不仅优化了资源配置,提升了生产力,还推动了社会经济的全面进步。

此外,互联网受欢迎的原因还在于其低成本和高效率。具体来说,它能够降低交易成本,例如淘宝网通过缩短中间环节,使得商品价格更低。同时,互联网节约了时间,使人们可以在任何时间获取新闻、进行交流,而不再受传统媒体的时间限制。

总的来说,互联网作为当代最重要的技术和产业之一,已经深刻改变了人们的生活、工作和学习方式。从提供信息服务到推动经济发展,互联网在现代社会中扮演着不可替代的角色。未来,随着技术的不断进步和应用的深入,互联网将继续引领社会的创新和发展。

二.HTTP基本原理

我们会详细了解 HTTP 的基本原理,了解在浏览器中敲入 URL 到获取网页内容之间发生了什么。了解了这些内容,有助于我们进一步了解爬虫的基本原理。

什么是URI和URL和URN

现在看一下这三者的关系
在这里插入图片描述
URL统一资源定位符,而URN统一资源名称

**URI(Uniform Resource Identifier,统一资源标识符)**是一个通用的概念,用于唯一标识一个资源。它包括了URL(Uniform Resource Locator,统一资源定位符)和URN(Uniform Resource Name,统一资源名称)。URL不仅标识资源,还提供了资源的位置信息,如协议类型(如HTTPS)、服务器地址、端口号以及资源的路径等。URN仅提供资源的名称,而不指定其位置,比如一本书的ISBN号就是一个URN,但它本身并不提供如何找到这本书的信息。

什么是超文本

超文本是一种通过超链接将不同文本信息组织在一起的网状文本,它允许用户在一个文档中点击链接以跳转到另一个文档或特定部分。这种非线性的信息组织方式极大地促进了信息的共享和传播,是现代万维网的核心技术之一。

超文本的概念最早由泰德·尼尔森在1960年代提出,它是一种能够链接不同文本的技术,用于信息的组织和检索。在万维网中,超文本通过HTML实现,使用标签定义超链接,并通过href属性指定链接的目标地址。超文本不仅包含文本,还可以涵盖图片、视频、音频等多媒体内容,这些内容也可以成为可点击的链接

HTTP 和 HTTPS

HTTP 的全称是 Hyper Text Transfer Protocol,中文名叫做超文本传输协议,HTTP 协议是用于从网络传输超文本数据到本地浏览器的传送协议,它能保证传送高效而准确地传送超文本文档。HTTP 由万维网协会(World Wide Web Consortium)和 Internet 工作小组 IETF(Internet Engineering Task Force)共同合作制定的规范,目前广泛使用的是 HTTP 1.1 版本。
HTTPS 的全称是 Hyper Text Transfer Protocol over Secure Socket Layer,是以安全为目标的 HTTP 通道,简单讲是 HTTP 的安全版,即 HTTP 下加入 SSL 层,简称为 HTTPS。

HTTPS 的工作原理

在这里插入图片描述

这张图片展示了一个基于HTTPS协议的客户端与服务器之间的通信流程。整个流程分为客户端发起请求、服务器响应和客户端处理响应三个主要部分。

客户端发起请求:

客户端通过浏览器访问https://www.runoob.com网站,向服务器发送一个HTTPS请求。
请求中包含公钥和私钥,用于加密和解密后续的通信内容。
服务器响应:

服务器接收到客户端的请求后,首先验证公钥和私钥是否匹配。
如果验证成功,服务器会生成一个新的随机密钥(key),并将其与公钥一起返回给客户端。
同时,服务器还会使用私钥对随机密钥进行加密,并将加密后的密钥发送给客户端。
客户端处理响应:

客户端收到服务器返回的公钥和加密后的随机密钥后,会使用私钥对其进行解密,以获取原始的随机密钥。
然后,客户端使用这个随机密钥对后续的通信内容进行加密,并将加密后的内容发送给服务器。
最后,服务器会使用之前生成的随机密钥对接收的内容进行解密,以获得原始信息。

HTTP的工作原理

HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所以一共是 12 个包。

下面是TCP的具体流程
在这里插入图片描述
第一次握手:客户端尝试连接服务器,向服务器发送 syn 包(同步序列编号Synchronize Sequence Numbers),syn=j,客户端进入 SYN_SEND 状态等待服务器确认
第二次握手:服务器接收客户端syn包并确认(ack=j+1),同时向客户端发送一个 SYN包(syn=k),即 SYN+ACK 包,此时服务器进入 SYN_RECV 状态
第三次握手:第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手

HTTP 请求过程

我们在浏览器中输入一个 URL,回车之后便会在浏览器中观察到页面内容。实际上,这个过程是浏览器向网站所在的服务器发送了一个请求,网站服务器接收到这个请求后进行处理和解析,然后返回对应的响应,接着传回给浏览器。响应里包含了页面的源代码等内容,浏览器再对其进行解析,便将网页呈现了出来,模型如图所示
在这里插入图片描述

请求

接下来,我们开始了解,http请求
HTTP请求由以下三个主要部分组成:

  1. 请求行

    • 方法:最常用的HTTP方法包括GET、POST、PUT、DELETE等,这些方法定义了客户端与服务器之间的交互类型。例如,GET用于请求资源,POST用于提交数据。

    • URL:指定请求的资源路径,即希望访问的网页或资源在服务器上的位置。

    • 协议版本:表明客户端使用的HTTP版本,以确保服务器能够正确理解客户端的请求。

  2. 请求头
    按键值对形式提供额外的信息,以帮助服务器理解请求的具体需求和能力。

    • Host:指定请求的目的地域名,帮助服务器区分来自不同域名的请求。
    • User-Agent:描述发出请求的用户代理(通常为浏览器)的信息,包括操作系统、浏览器名称及版本等。
    • Accept:告知服务器客户端能够处理的内容类型,如文本、图片等。
    • Accept-Language:声明客户端优先接受的语言。
    • Authorization:包含用于身份验证的凭证,如Token或基本认证信息。
    • Cookie:携带网站为了识别用户而存储在客户端的小型文本文件。
    • Content-Type:当请求体包含实体时,指明媒体类型,如application/json、multipart/form-data等。
    • Content-Length:如果请求体存在,表示请求体的长度。
  3. 请求体(可选):
    实际的数据内容,通常在POST、PUT等请求中使用,向服务器发送所需的数据,如表单提交的数据。

总的来说,HTTP请求是一个结构化的数据包,它通过请求行、请求头和请求体的组合来传达客户端的需求和数据到服务器,使得服务器能够根据提供的信息做出适当的响应。

响应

HTTP响应是服务器对客户端请求的回复,它包括以下几个主要部分:

  1. 状态行

    • 协议版本:显示服务器使用的HTTP版本。
    • 状态码:表示请求的处理结果,五位数代码,如200表示成功,404表示未找到,500表示服务器内部错误。
    • 状态消息:为状态码提供文本描述,例如“OK”对于200状态码。
  2. 响应头

    • Date:响应生成的日期和时间。
    • Server:服务器软件的名称和版本。
    • Content-Type:响应主体的MIME类型,如text/html。
    • Content-Length:响应主体的长度,以字节为单位。
    • Connection:管理连接的方式,如关闭连接或保持连接。
    • Set-Cookie:服务器发送给客户端的Cookies,用于追踪会话或保存用户偏好设置。
    • Cache-Control:控制如何缓存响应的指令。
    • Expires:响应过期的日期和时间。
    • Location:重定向的URL(在状态码为3xx时常用)。
  3. 响应体(可选):
    实际的数据内容,如HTML页面、图片或其他媒体。

综上,HTTP响应通过这些组成部分向客户端传达了请求处理的结果和必要的数据,客户端根据这些信息可以进行进一步的处理,如展示页面或处理错误。

三.Web网页基础

网页的组成

结构(HTML):用于描述页面的结构;

表现(CSS):用于控制页面中元素的样式;

行为(JavaScript):用于响应用户操作。

HTML是超文本标记语言(HyperText Markup Language)是一种用于创建网页的标准标记语言。HTML负责网页三个组成部分中的结构,HTML使用标签的形式来标识网页中的不同组成部分。所谓的超文本指的是超链接,使用超链接可以让我们从一个页面跳转到另一个页面。

CSS 是指层叠样式表 (Cascading Style Sheets),样式定义如何显示HTML 元素,用于控制web页面的外观。CSS负责网页三个组成部分中的表现,样式通常保存在外部的 .css 文件中。我们只需要编辑一个简单的 CSS 文档就可以改变所有页面的布局和外观。

JavaScript 是脚本语言(简称"JS"),是一种轻量级的编程语言,用于控制网页的行为。JavaScript负责网页三个组成部分中的行为,可插入 HTML 页面的编程代码,JavaScript 插入 HTML 页面后,可由所有的现代浏览器执行。

网页的结构

我们首先用例子来感受一下 HTML 的基本结构。新建一个文本文件,名称可以自取,后缀为 html,内容如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>This is a Demo</title>
</head>
<body>
<div id="container">
<div class="wrapper">
<h2 class="title">Hello World</h2>
<p class="text">Hello, this is a paragraph.</p>
</div>
</div>
</body>
</html>

这是一个基本的HTML网页结构,包括以下几个部分:

  1. <!DOCTYPE html>:声明文档类型为HTML5。
  2. <html>:HTML文档的根元素。
  3. <head>:包含元信息,如字符集、标题等。
  4. <meta charset="UTF-8">:定义文档使用的字符编码为UTF-8。
  5. <title>:设置网页标题,显示在浏览器标签页上。
  6. <body>:包含网页的所有可见内容。
  7. <div id="container">:一个带有id属性的div元素,用于包裹其他元素。
  8. <div class="wrapper">:一个带有class属性的div元素,用于包裹其他元素。
  9. <h2 class="title">Hello World</h2>:一个二级标题元素,内容为"Hello World"。
  10. <p class="text">Hello, this is a paragraph.</p>:一个段落元素,内容为"Hello, this is a paragraph."。

这个网页结构包含了一个简单的标题和一段文本,它们被包裹在一个名为"wrapper"的div元素中,而这个div元素又被另一个名为"container"的div元素包裹。这样的结构有助于组织和管理页面内容。

四.爬虫基本原理

我们先看一下基本的示例图
在这里插入图片描述
这张图展示了一个简化的网络爬虫的工作原理,按照自上而下的逻辑逐步解释如下:

  1. 初始URL:这是网络爬虫开始工作的起点。爬虫从这个URL开始,访问该网页并下载其内容。

  2. 网页抓取/下载:爬虫下载初始页面的内容,通常是一个HTML文件。

  3. 解析网页,提取有用信息和链接:下载内容后,爬虫会解析HTML代码,从中提取出有价值的信息(如文本、图片等)以及网页中的超链接。

  4. 将提取的链接放入待抓取URL队列:提取出的链接会被添加到待抓取URL队列中,等待进一步处理。

  5. 待抓取URL队列:这是一个URL列表,爬虫按照顺序(通常是先进先出)从队列中取出URL进行访问和下载。

  6. 已抓取URL队列:为了避免重复抓取相同的网页,爬虫会将已经访问过的URL放入已抓取URL队列中。

  7. 循环抓取:爬虫继续从待抓取URL队列中取出URL,重复上述的抓取、解析和提取链接的过程。

  8. 满足停止条件,结束抓取:爬虫会持续这个过程,直到满足某个停止条件,比如待抓取URL队列为空,或者达到了预设的抓取深度或数量。

  9. 保存数据:在抓取过程中提取的有用信息会被保存起来,这可能是存储到数据库、文件或其他数据存储系统中。

整个流程是一个循环的过程,爬虫不断地从一个链接跳到另一个链接,不断扩展其抓取范围,直到完成预定的抓取任务。在这个过程中,爬虫可能会遇到各种问题,如链接失效、网页结构变化等,需要相应的逻辑来处理这些异常情况。

五 会话和Cookies

Cookie和会话是两种不同的技术,它们在Web开发中用于跟踪用户状态和保持用户信息。下面是它们之间的主要区别:

  1. 存储位置:Cookie存储在客户端(浏览器),而会话数据存储在服务器端。
  2. 生命周期:Cookie可以设置过期时间,过期后会被删除;会话通常在用户关闭浏览器或长时间不活动后自动失效。
  3. 安全性:由于Cookie存储在客户端,因此可能存在安全风险,如跨站脚本攻击(XSS)和跨站请求伪造(CSRF)。相比之下,会话数据存储在服务器端,相对更安全。
  4. 容量:Cookie的大小受限于浏览器的限制,通常不超过4KB。而会话数据可以在服务器端存储更多的信息。
  5. 用途:Cookie主要用于记住用户的偏好设置、登录状态等,而会话主要用于跟踪用户在网站上的活动,如购物车内容、页面访问历史等。
  6. 管理方式:Cookie可以通过JavaScript代码进行操作,而会话数据通常由服务器端的编程语言(如PHP、Python、Java等)进行管理。

六 代理基本原理

基本原理

我们在做爬虫的过程中经常会遇到这样的情况,最初爬虫正常运行,正常抓取数据,一切看起来都是那么美好,然而一杯茶的功夫可能就会出现错误,比如 403 Forbidden,这时候打开网页一看,可能会看到 “您的 IP 访问频率太高” 这样的提示。出现这种现象的原因是网站采取了一些反爬虫措施。比如,服务器会检测某个 IP 在单位时间内的请求次数,如果超过了这个阈值,就会直接拒绝服务,返回一些错误信息,这种情况可以称为封 IP。

既然服务器检测的是某个 IP 单位时间的请求次数,那么借助某种方式来伪装我们的 IP,让服务器识别不出是由我们本机发起的请求,不就可以成功防止封 IP 了吗?

一种有效的方式就是使用代理,后面会详细说明代理的用法。在这之前,需要先了解下代理的基本原理,它是怎样实现 IP 伪装的呢?

在这里插入图片描述
这张图展示了代理服务器在客户端和目标服务器之间进行中介的基本工作流程。

  1. 客户端请求:客户端(如您的浏览器)向代理服务器发送一个请求,这个请求可能是获取一个网页、一个文件或任何其他网络资源。

  2. 接收并处理请求:代理服务器接收到客户端的请求后,可能会进行一些处理工作。这包括检查请求的有效性、添加或删除请求头信息、进行用户身份验证等。

  3. 转发请求:一旦代理服务器处理完请求(可能还会修改请求),它会将请求转发给目标服务器。目标服务器是请求资源的原始位置。

  4. 目标服务器响应:目标服务器收到请求后,会生成一个响应,比如返回请求的网页内容。

  5. 接收并处理响应:代理服务器接收到目标服务器的响应后,同样可能会对响应进行一些处理。这可能包括缓存响应内容、过滤广告或恶意软件、压缩数据等。

  6. 返回响应给客户端:最后,代理服务器将处理后的响应返回给客户端,客户端再将响应内容呈现给用户。

在整个过程中,代理服务器可以提供额外的功能,如安全性增强(通过防火墙规则)、匿名性(隐藏客户端IP地址)、速度提升(通过缓存)等。此外,代理可以是透明的(客户端不知道其存在)或非透明的(客户端需要配置以使用代理)。

代理实际上指的就是代理服务器,英文叫作 proxy server,它的功能是代理网络用户去取得网络信息。形象地说,它是网络信息的中转站。在我们正常请求一个网站时,是发送了请求给 Web 服务器,Web 服务器把响应传回给我们。如果设置了代理服务器,实际上就是在本机和服务器之间搭建了一个桥,此时本机不是直接向 Web 服务器发起请求,而是向代理服务器发出请求,请求会发送给代理服务器,然后由代理服务器再发送给 Web 服务器,接着由代理服务器再把 Web 服务器返回的响应转发给本机。这样我们同样可以正常访问网页,但这个过程中 Web 服务器识别出的真实 IP 就不再是我们本机的 IP 了,就成功实现了 IP 伪装,这就是代理的基本原理。

代理的作用

那么,代理有什么作用呢?我们可以简单列举如下。

突破自身 IP 访问限制,访问一些平时不能访问的站点。

访问一些单位或团体内部资源,如使用教育网内地址段免费代理服务器,就可以用于对教育网开放的各类 FTP 下载上传,以及各类资料查询共享等服务。

提高访问速度,通常代理服务器都设置一个较大的硬盘缓冲区,当有外界的信息通过时,同时也将其保存到缓冲区中,当其他用户再访问相同的信息时, 则直接由缓冲区中取出信息,传给用户,以提高访问速度。

隐藏真实 IP,上网者也可以通过这种方法隐藏自己的 IP,免受攻击,对于爬虫来说,我们用代理就是为了隐藏自身 IP,防止自身的 IP 被封锁。

爬虫代理

对于爬虫来说,由于爬虫爬取速度过快,在爬取过程中可能遇到同一个 IP 访问过于频繁的问题,此时网站就会让我们输入验证码登录或者直接封锁 IP,这样会给爬取带来极大的不便。

使用代理隐藏真实的 IP,让服务器误以为是代理服务器在请求自己。这样在爬取过程中通过不断更换代理,就不会被封锁,可以达到很好的爬取效果。

代理分类

1.根据协议区分

根据代理的协议,代理可以分为如下类别:

FTP 代理服务器,主要用于访问 FTP 服务器,一般有上传、下载以及缓存功能,端口一般为 21、2121 等。

HTTP 代理服务器,主要用于访问网页,一般有内容过滤和缓存功能,端口一般为 80、8080、3128 等。

SSL/TLS 代理,主要用于访问加密网站,一般有 SSL 或 TLS 加密功能(最高支持 128 位加密强度),端口一般为 443。

RTSP 代理,主要用于 Realplayer 访问 Real 流媒体服务器,一般有缓存功能,端口一般为 554。

Telnet 代理,主要用于 telnet 远程控制(黑客入侵计算机时常用于隐藏身份),端口一般为 23。

POP3/SMTP 代理,主要用于 POP3/SMTP 方式收发邮件,一般有缓存功能,端口一般为 110/25。

SOCKS 代理,只是单纯传递数据包,不关心具体协议和用法,所以速度快很多,一般有缓存功能,端口一般为 1080。SOCKS 代理协议又分为 SOCKS4 和 SOCKS5,SOCKS4 协议只支持 TCP,而 SOCKS5 协议支持 TCP 和 UDP,还支持各种身份验证机制、服务器端域名解析等。简单来说,SOCK4 能做到的 SOCKS5 都可以做到,但 SOCKS5 能做到的 SOCK4 不一定能做到。

2. 根据匿名程度区分

根据代理的匿名程度,代理可以分为如下类别。

高度匿名代理,高度匿名代理会将数据包原封不动的转发,在服务端看来就好像真的是一个普通客户端在访问,而记录的 IP 是代理服务器的 IP。

普通匿名代理,普通匿名代理会在数据包上做一些改动,服务端上有可能发现这是个代理服务器,也有一定几率追查到客户端的真实 IP。代理服务器通常会加入的 HTTP 头有 HTTP_VIA 和 HTTP_X_FORWARDED_FOR。

透明代理,透明代理不但改动了数据包,还会告诉服务器客户端的真实 IP。这种代理除了能用缓存技术提高浏览速度,能用内容过滤提高安全性之外,并无其他显著作用,最常见的例子是内网中的硬件防火墙。

间谍代理,间谍代理指组织或个人创建的,用于记录用户传输的数据,然后进行研究、监控等目的代理服务器。

  • 10
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

忘忧记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值