爬虫基础知识

HTTP基本原理
URL

URL:(Universal Resource Locator)统一资源定位符,它是用于标识和定位互联网上资源的字符串。URL通常用于在Web浏览器中访问网页,也可以用于访问其他类型的资源,如图像、视频、文件等。

URL通常遵循一下格式:

<协议>://<主机名>:<端口号>/<路径>?<查询参数>#fragment

其中,协议、主机名和路径是必需的部分,而端口号和查询参数是可选的。

如:
https://www.example.com:8080/path/to/resource?param1=value1&param2=value2#section1

在这个示例中:

  • 协议:https是指使用的通信协议,常见的协议有HTTP、HTTPS、FTP等。
  • 主机名:www.example.com是指要访问的服务器的域名或IP地址。
  • 端口号:8080是指服务器上用于接收请求的端口号,默认的HTTP端口是80,HTTPS端口是443。
  • 路径:/path/to/resource是指服务器上资源的路径,用于指定要访问的具体文件或目录。
  • 查询参数:param1=value1&param2=value2是指附加在URL中的额外参数,用于向服务器传递额外的信息。
  • fragment:片段。它是对于资源描述的部分补充,用于指定文档内的特定位置或锚点。它以#符号开头,后面跟着片段标识符。浏览器加载URL时,它会自动滚动到指定的片段位置,片段字段通常在HTML文档中使用

URL的目的是提供一种标准化的方式来定位和访问互联网上的资源。通过解析URL,Web浏览器可以确定要请求的资源的位置,并与服务器进行通信以获取所需的内容。

HTTP和HTTPS

HTTP的全称是Hypertext Transfer Protocol,超文本传输协议,其作用就是把超文本数据从网络传输到本地浏览器

HTTPS的全称是Hypertext Transfer Protocol over Secure Socket Layer,是以安全为目标的HTTP通道,简单讲就是HTTP的安全版,即在HTTP协议上添加SSL层,简称HTTPS,因此通过该协议传输的内容都是经过SSL加密的。

SSL作用

  • 建立一个信息安全通道,通过加密数据内容,保证数据传输的安全性
  • 确认网站的真实性。通过校验网站的CA证书
HTTP请求过程:

当客户端(如浏览器)发送HTTP请求时,以下是请求的一般过程:

  1. 解析URL:客户端解析用户提供的URL,提取出协议、主机名、端口号、路径和查询参数等信息。
  2. 建立连接:客户端使用解析得到的主机名和端口号建立与服务器的TCP连接。如果使用的是HTTPS协议,则还需要进行SSL/TLS握手过程来建立安全连接。
  3. 构建请求:客户端构建HTTP请求报文,包括请求行、请求头和请求体。请求行包含请求方法(GET、POST等)、路径和协议版本。请求头包含关于请求的附加信息,如Accept、User-Agent、Content-Type等。请求体包含需要发送给服务器的数据,通常在POST请求中使用。
  4. 发送请求:客户端将构建好的HTTP请求发送到服务器。
  5. 接收响应:服务器接收到请求后,处理请求并生成HTTP响应报文。响应报文包括状态行、响应头和响应体。状态行包含响应状态码(如200表示成功、404表示未找到等)和协议版本。响应头包含关于响应的附加信息,如Content-Type、Content-Length等。响应体包含服务器返回的数据。
  6. 处理响应:客户端接收到服务器的响应后,根据响应状态码和响应头等信息进行处理。这可能包括解析响应体、处理重定向、处理错误等。
  7. 关闭连接:请求处理完成后,客户端和服务器都可以选择关闭TCP连接,以释放资源。

一个HTTP请求通常包含以下内容:

  1. 请求行(Request Line):包含请求方法、URL和协议版本。例如:GET /index.html HTTP/1.1。

  2. 请求头(Request Headers):包含关于请求的附加信息,以键值对的形式表示。常见的请求头包括:

    • Host:指定请求的目标主机名和端口号。
    • User-Agent:标识发送请求的客户端应用程序或浏览器。
    • Accept:指定客户端能够接受的响应内容类型。
    • Content-Type:指定请求体中的数据类型。
    Content-TypePOST提交数据方式
    application/x-www-form-urlencoded使用表单形式提交数据,数据会被编码为键值对的形式,类似于URL查询字符串。
    multipart/form-data用于上传文件或包含二进制数据的表单提交。数据会被分割为多个部分,并以边界标识符分隔。
    application/json使用JSON格式提交数据。数据会被序列化为JSON字符串。
    application/xml使用XML格式提交数据。数据会被序列化为XML字符串。
    text/plain使用纯文本格式提交数据。数据会以纯文本的形式发送。
    • Content-Length:指定请求体的长度。
    • Cookie:Cookie是一种用于在客户端和服务器之间传递状态信息的机制。当客户端首次访问服务器时,服务器可以通过Set-Cookie响应头将一个或多个Cookie值发送给客户端,然后客户端在后续的请求中通过Cookie请求头将这些值发送回服务器。这样,服务器可以根据Cookie中的信息来识别和跟踪特定的用户会话。
    • User-Agent:User-Agent字段包含了发送请求的客户端应用程序或浏览器的信息。服务器可以使用User-Agent字段来识别客户端的类型和版本,以便根据不同的客户端进行适配和处理。
    • Referer:Referer字段指示了当前请求是从哪个页面链接过来的。当用户点击一个链接或提交一个表单时,浏览器会自动在请求头中添加Referer字段,告诉服务器当前请求的来源。服务器可以使用Referer字段来了解用户的访问路径
  3. 空行(Blank Line):用于分隔请求头和请求体。

  4. 请求体(Request Body):仅在某些请求方法(如POST)中存在,用于向服务器发送数据。

HTTP响应

一个HTTP响应(response)通常包含以下内容:

  1. 状态行(Status Line):状态行包含了HTTP协议版本号、状态码和对应的状态消息。例如:HTTP/1.1 200 OK。

  2. 响应头(Response Headers):响应头包含了关于响应的一些元数据信息,如服务器类型、日期、内容类型、内容长度等。常见的响应头包括Content-Type、Content-Length、Server等。

    • Content-Type:Content-Type字段指示了响应主体的媒体类型。它告诉客户端如何解析和处理响应的内容,常见的值包括text/html、application/json、image/jpeg等。
    • Content-Length:Content-Length字段指示了响应主体的长度,以字节为单位。客户端可以使用这个字段来确定接收完整响应所需的字节数。
    • Server:Server字段指示了响应的服务器软件的名称和版本号。这个字段可以用于识别服务器的类型和版本。
    • Date:Date字段指示了服务器发送响应的日期和时间。这个字段可以用于确定响应的时效性和缓存策略。
    • Set-Cookie:Set-Cookie字段用于在响应中设置Cookie。服务器可以使用这个字段来告知客户端保存会话信息或其他相关数据。
    • Location:Location字段用于重定向响应。当服务器需要将客户端重定向到另一个URL时,会使用这个字段来指示新的URL。
  3. 空行(Blank Line):空行用于分隔响应头和响应体,它是一个空的CRLF(回车换行)。

  4. 响应体(Response Body):响应体包含了实际的响应数据,可以是HTML文档、JSON数据、图片、文件等,具体内容取决于请求的资源和服务器的处理结果。

HTTP2.0的优化
  1. 多路复用(Multiplexing):HTTP/2.0允许在同一个连接上同时发送多个请求和响应。这消除了HTTP/1.0中的串行请求问题,提高了并发性能和响应速度。
  2. 二进制分帧(Binary Framing):HTTP/2.0将数据分割为多个二进制帧进行传输,而不是像HTTP/1.0那样使用纯文本格式。这样做可以提高传输效率和可靠性,并允许更好地处理网络中的错误和丢包。
  3. 头部压缩(Header Compression):HTTP/2.0使用HPACK算法对请求和响应的头部进行压缩。这减少了头部的大小,减少了网络传输的数据量,提高了性能。
  4. 服务器推送(Server Push):HTTP/2.0允许服务器在客户端请求之前主动推送相关的资源。这避免了客户端发送额外的请求来获取相关资源,减少了延迟和网络往返次数。
  5. 流优先级(Stream Prioritization):HTTP/2.0引入了流的概念,允许对不同的请求和响应设置优先级。这样可以确保重要的资源优先加载,提高用户体验。
Web网页基础

网页可以分为三大部分,HTML、CSS、JavaScript。

HTML(超文本标记语言)

HTML 是一种标记语言,用于定义网页的结构和内容。它由一系列的标签组成,每个标签描述了网页中的一个元素,如标题、段落、图像、链接等。HTML 提供了一种逻辑结构来组织和呈现文本和媒体内容。浏览器解析 HTML 并渲染出网页的结构。

CSS(层叠样式表):

CSS 用于定义网页的样式和布局。它与 HTML 协同工作,通过选择器选择 HTML 元素,并为这些元素应用样式规则。CSS 可以控制元素的颜色、大小、字体、边距、布局等属性,使网页具有吸引力和一致的外观。通过将样式与结构分离,CSS 提供了更好的灵活性和可维护性。

JavaScript:

JavaScript 是一种脚本语言,用于实现网页的交互功能和动态行为。通过 JavaScript,可以对网页进行事件处理、数据验证、动态内容更新等操作。它可以与 HTML 和 CSS 交互,使网页更具响应性和互动性。JavaScript 还提供了许多内置函数和对象,使开发者能够操作网页中的元素、处理用户输入和与服务器进行通信

爬虫的基本原理

爬虫是一种按照一定规则,自动抓取互联网信息的程序或者脚本。

概述
  • 获取网页

向网站的服务器发送一个请求,服务器返回的响应体就是网页源代码

  • 提取信息

使用正则表达式、第三方库如Beautiful Soup、pyquery、lxml等高效地从源代码中提取网页信息

  • 保存数据

提取数据后,我们一般会将提取到的数据保存到某处以便后续使用,如保存为TXT文本、JSON文本,也可以保存到数据库

  • 自动化

就是爬虫程序可以代替人来完成上述操作,自动化地爬取数据,并在过程中进行各种异常处理及错误重试等操作

能爬怎样的数据

网页中各种各样的信息,如常规网页的HTML源码,JSON字符串、各种二进制数据,如图片、视频和音频等。

Session和Cookie

背景知识:HTTP协议的无状态特性,即服务器不会保留与客户端之间的通信状态。每个请求-响应周期都是相互独立的,服务器不会在不同请求之间保留任何关于客户端的信息。

由于HTTP的无状态性质,为了实现会话管理和跟踪用户状态,通常使用会话机制,如使用Cookie或Session。通过在请求和响应中使用唯一标识符(如Cookie),服务器可以识别和跟踪特定用户的会话状态。这种方式使得服务器能够在一系列请求中关联起来,并提供个性化的体验。

Session在服务端,也就是网站的服务器,用来保存用户的信息,Cookie在客户端,有了Cookie, 浏览器在下次访问相同网页时就会自动附带上它,并发送给服务器,服务器通过识别Cookie鉴定出是哪个用户在访问,然后判断此用户是否处于登录状态,并返回相应的响应。

会话维持

利用Cookie保持状态,在客户端第一次请求服务器时,服务器会返回一个响应头中带有Set-Cookie字段的响应给客户端,这个字段用来标记用户。客户端浏览器会把Cookie保存起来,当下一次请求相同的网站时,把保存的Cookie放到请求头中一起提交给服务器。Cookie中携带着Session ID相关信息,服务器通过检查Cookie即可找到对应的Session,继而通过判断Session辨认用户状态。如果Session当前是有效的,就证明用户处于登录状态,返返回正常内容,反之如果传给服务器的Cookie是无效的,或者会话已经过期了,客户端将不能继续访问页面,此时可能会收到错误的响应或者跳转到登录页重新登录

Cookie属性结构

在这里插入图片描述

其中,每个条目都可以称为一个Cookie条目,Cookie具有如下属性:

  1. Name(名称):Cookie的名称,用于标识Cookie。
  2. Value(值):与Cookie相关联的值,存储在客户端。
  3. Domain(域):指定Cookie可用的域名。默认情况下,Cookie只在设置它的域名下可用。
  4. Path(路径):指定Cookie可用的路径。默认情况下,Cookie仅在设置它的路径及其子路径下可用。
  5. Expires(过期时间):指定Cookie的过期时间。在过期时间之后,浏览器将删除Cookie。
  6. Max-Age(最大生命周期):指定Cookie的最大生命周期,以秒为单位。与Expires属性类似,但它表示相对于当前时间的持续时间。
  7. Secure(安全标志):如果设置为true,则Cookie只通过加密的HTTPS连接传输。默认情况下,为false。
  8. HttpOnly(仅限HTTP):如果设置为true,则Cookie无法通过客户端脚本(如JavaScript)访问。这有助于防止跨站点脚本攻击(XSS)。
  9. SameSite(同站限制):指定Cookie是否可以跨站点发送。它可以设置为Strict(严格模式),表示仅在请求来自与设置Cookie的站点相同的情况下发送Cookie;或者设置为Lax(宽松模式),表示在某些情况下(如从外部站点发起的GET请求)发送Cookie。
代理

背景知识:某些网站会采取“检测某个IP在单位时间内的请求次数,超过设定的阈值,就直接拒绝提供服务”的反爬虫措施。

为了防止IP被封,一种有效的伪装方式是使用代理

基本原理

代理(Proxy)是一种充当客户端和服务器之间中间人的服务器。它接收来自客户端的请求,并将其转发给目标服务器,然后将服务器的响应返回给客户端。

当客户端通过代理发送请求时,代理服务器充当了客户端和目标服务器之间的中间人。下面是代理突破IP封锁的一般原理:

  1. 客户端向代理发送请求:客户端将请求发送给代理服务器,请求中包含目标服务器的地址和其他相关信息。
  2. 代理服务器接收请求:代理服务器接收到客户端的请求。
  3. 代理服务器转发请求:代理服务器将客户端的请求转发给目标服务器。在这个过程中,代理服务器使用自己的IP地址作为源IP地址。
  4. 目标服务器接收请求:目标服务器接收到代理服务器转发的请求。
  5. 目标服务器响应请求:目标服务器处理请求并生成响应。
  6. 代理服务器接收响应:代理服务器接收到目标服务器的响应。
  7. 代理服务器转发响应:代理服务器将目标服务器的响应转发给客户端。客户端接收到的响应似乎是直接来自目标服务器。

通过这个过程,代理服务器隐藏了客户端的真实IP地址,目标服务器只能看到代理服务器的IP地址。

爬虫代理

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

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

代理分类

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

  • 高度匿名代理:高度匿名代理会将数据包原封不动地转发,在服务端看来似乎真的是一个普通客户端在访问,记录的IP则是代理服务器的IP
  • 普通匿名代理:普通匿名代理会对数据包做一些改动,服务端可能会发现正在访问自己的是个代理服务器,并且有一定概率去追查客户端的真实IP。这里的代理服务器通常会加入的HTTP头有HTTP_VIA和HTTP_X_FORWARDED_FOR.
  • 透明代理:透明代理不但改动了数据包,还会告诉服务器客户端的真实IP。这种代理除了能用缓存技术提高浏览速度,用内容过滤提高安全性之外,并无其他显著作用。
  • 间谍代理:有组织或个人创建的代理服务器,用于记录用户传输的数据,然后对记录的数据进行研究、监控
多线程

进程与线程

进程可以理解为一个可以独立运行的程序单位,例如打开一个浏览器,就开启了一个浏览器进程,打开一个文本编辑器,就开启了一个文本编辑器进程。在一个进程中,可以同时处理很多事情,在浏览器进程中,可以在多个选项卡中打开多个页面,有的页面播放音乐,有的播放视频…这些任务可以同时运行,其实一个任务就对应了一个线程

多线程就是一个进程中同时执行多个线程

并发是指多个线程对应的多条指令快速轮换地执行

并行指同一时刻有多条指令在多个处理器上同时执行,因此并行只能存在于多处理器系统中

如果把多线程、多进程运用到爬虫程序中的话,爬虫的爬取效率会大幅提升

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值