[爬虫知识] http协议

相关爬虫专栏:JS逆向爬虫实战  爬虫知识点合集  爬虫实战案例


引言:爬虫与HTTP的不解之缘

  • 爬虫作用:模拟浏览器请求网页
  • 为何要懂HTTP:http是网络通信的基石,爬虫抓取数据就是通过HTTP协议进行的,了解http有助于我们更好的构筑爬虫,解决问题。

一、什么是HTTP协议

  • HTTP (HyperText Transfer Protocol) 超文本传输协议,是互联网上应用最为广泛的一种网络协议。所有 WWW 文件都必须遵守这个标准。
  • 特点:
    • 客户端-服务器端间建立通讯连接:请求-响应
    • 无状态:每次请求独立,服务器不保留连接状态(需要cookie/session来保存信息)
    • 灵活简单:支持多种数据类型。

二、请求与响应机制

1. 客户端发送请求:

  • 请求行
    • 请求方法 (Method): GET、POST、PUT、DELETE、HEAD、OPTIONS 等,重点讲解爬虫常用的 GETPOST
    • 请求 URL (Uniform Resource Locator): 要访问的资源路径。
    • HTTP 版本: 如 HTTP/1.1,HTTP/2.0。
  • 请求头
    • User-Agent: 标识客户端类型,爬虫伪装浏览器最常用的头信息。
    • Referer: 防盗链,此条请求的来源页面。
    • Cookie: 保持会话状态的关键。
    • Host: 目标服务器的主机名。
    • Accept: 客户端可接受的媒体类型。
    • Accept-Encoding: 客户端接受的编码方式(如 gzip, deflate)。
    • Connection: 连接状态(如 Keep-Alive)。
    • Content-Type: 请求体的数据类型和长度,常用来检查数据是json型还是text型。
    • 自定义请求头: 爬虫中可能添加的自定义头。
  • 请求体
    • 主要用于POST请求,携带提交的数据(表单数据,JSON数据等)                                      --  载荷中写着请求载荷/表单数据

2. 服务器端返回响应:

  • 状态行
    • HTTP 版本。
    • 状态码 (Status Code):
      • 2xx (成功):200 OK (最常见)。
      • 3xx (重定向--即跳转访问到另一个页面):301 (永久), 302 (临时), 304 (未修改)。
      • 4xx (客户端错误):400 (请求错误), 403 (禁止访问), 404 (未找到)。
      • 5xx (服务器错误):500 (内部错误), 502 (网关错误)。
    • 状态信息: 对状态码的文字描述。
  • 响应头
    • Set-Cookie: 服务器设置 Cookie 给客户端。
    • Location: 重定向 URL。
    • Server: 服务器软件信息。
    • Content-Type: 响应体的数据类型(如 text/html, application/json)。
    • Content-Length: 响应体的长度。
    • Vary 告知缓存机制哪些请求头会影响响应。
  • 响应体
    • 实际返回的数据,如 HTML、JSON、图片等。

三、HTTP协议与反爬机制的攻防战

在爬虫上,HTTP协议不光是信息传输的通道,更是爬虫与反爬双方攻防的主战场。网站会通过检查HTTP请求各个访问信息来确定其是正常或爬虫访问。而理解这些反爬策略与HTTP的关系就成了我们学习进阶爬虫的必修课。

1. 身份识别:User-Agent与Referer的伪装

UA与Referer是常见的请求头中检查的对象:前者为身份识别,后者为防盗链(访问该请求前是从哪个链接跳转过来的)

二者处理都是设置一个合法真实的对象即可。其中UA在遭遇更高级别的反爬检查时,可能需要备一个UA池。

2. 会话保持:Cookie/Seesion的设置

HTTP 协议本身是无状态的,这意味着服务器不会记住每次请求之间的信息。但为了实现用户登录、购物车、个性化推荐等功能,网站会使用 Cookie 和 Session 来维持会话状态。

详情了解见爬虫知识之Cookie与Session。通过requests.session的方式可以有效管理相关会话并规避吸纳检测请求频率的反爬。

3. 访问频率限制:IP限制与HTTP频率限制

网站为了防止服务器过载/资源滥用,一般会限制同IP/同用户的请求数量。

  • IP限制:服务器记录当前请求的IP地址,如果短时间访问量过大,就会暂时或永久封禁该ip。
  • HTTP请求频率限制:不仅ip,也有可能看用户id,cookie等分析来限制。
    • 爬虫应对方法:
      • 延时:每次请求时加一个固定或随机的的延时(time.sleep),模拟人类浏览行为,降低请求频率。
      • 代理IP池:使用大量的代理IP地址,分散请求来源,避免单一IP封禁。适用于大型爬虫项目。
      • 分布式爬虫:利用多台机器与多个IP同时爬取,进一步分散请求压力。

四、总结

HTTP协议的特性与爬虫紧密相关,对HTTP协议了解足够深入,能更有效的帮助我们爬取各个网站内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/pingmian/82113.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Spark/Flink/Doris离线实时数仓开发》目录

欢迎加入《Spark/Flink/Doris离线&实时数仓开发》付费专栏!本专栏专为大数据工程师、数据分析师及准备大数据面试的求职者量身打造,聚焦Spark、Flink、Doris等核心技术,覆盖离线与实时数仓开发的全流程。无论你是想快速上手项目、提升技术…

事务基础概念

事务 事务是什么? 事务是一种机制,一个操作序列,包含了一组数据库操作命令,并且把所有命令作为一个整体一起向系统提交或者撤销操作请求,即统一这组命令要么一起执行,要么一起不执行 简短概况就是&#…

四、【API 开发篇 (上)】:使用 Django REST Framework 构建项目与模块 CRUD API

【API 开发篇 】:使用 Django REST Framework 构建项目与模块 CRUD API 前言为什么选择 Django REST Framework (DRF)?第一步:创建 Serializers (序列化器)第二步:创建 ViewSets (视图集)第三步:配置 URLs (路由)第四步…

【北京盈达科技】GEO优化中的多模态了解

多模态数据处理领域,“模态”指的是不同类型的数据形式,每种模态都具有独特的结构和信息表达方式。以下是12种可能的模态类型,这些模态在实际应用中可以根据具体场景进行组合和处理: 1. 文本模态 描述:以文字形式存在…

推进可解释人工智能迈向类人智能讨论总结分享

目录 一、探索“可解释人工智能”:AI如何从“黑箱”走向“透明大师” 二、走进可解释人工智能:让AI的决策变得透明 (一)几种常见的特征导向方法 (二)像素级方法 1. 层次相关传播(LRP&#…

【Qt】Qt 5.9.7使用MSVC2015 64Bit编译器

环境 Qt版本:5.9.7 VS版本:VS2022 步骤 1、安装VS2022 三个必选项: a、使用C的桌面开发 b、Windows10 SDK 版本:10.0.18362.0 c、MSVC v140 VS 2015 生成工具 Windows10 SDK安装完成后,需要增加安装调试器。 2…

超越OpenAI CodeX的软件工程智能体:Jules

目前AI编码代理(coding agent)领域正迅速崛起,Google推出了一款名为Jules的非同步编码代理(asynchronous coding agent),主要针对专业开发者,与传统在开发环境中直接辅助编码的Cursor或Windsurf…

springboot使用xdoc-report包导出word

背景:项目需要使用xdoc-report.jar根据设置好的word模版,自动填入数据 导出word 框架使用 我的需求是我做一个模板然后往里面填充内容就导出我想要的word文件,问了下chatgpt还有百度,最后选用了xdocreport这个框架,主…

CodeBuddy实现pdf批量加密

本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 前言 在信息爆炸的时代,PDF 格式因其跨平台性和格式稳定性,成为办公、学术、商业等领域传递信息的重要载体。从机密合同到个人隐私文档&#xff0c…

如何在PyCharm2025中设置conda的多个Python版本

前言 体验的最新版本的PyCharm(Community)2025.1.1,发现和以前的版本有所不同。特别是使用Anaconda中的多个版本的Python的时候。 关于基于Anaconda中多个Python版本的使用,以及对应的Pycharm(2023版)的使用,可以参考…

STM32F103 HAL多实例通用USART驱动 - 高效DMA+RingBuffer方案,量产级工程模板

导言 《STM32F103_LL库寄存器学习笔记12.2 - 串口DMA高效收发实战2:进一步提高串口接收的效率》前阵子完成的LL库与寄存器版本的代码,有一个明显的缺点是不支持多实例化。最近,计划基于HAL库系统地梳理一遍bootloader程序开发。在bootloader程…

【数据结构】栈和队列(上)

目录 一、栈(先进后出、后进先出的线性表) 1、栈的概念及结构 2、栈的底层结构分析 二、代码实现 1、定义一个栈 2、栈的初始化 3、入栈 3、增容 4、出栈 5、取栈顶 6、销毁栈 一、栈(先进后出、后进先出的线性表) 1、…

Vue 3 官方 Hooks 的用法与实现原理

Vue 3 引入了 Composition API,使得生命周期钩子(hooks)在函数式风格中更清晰地表达。本篇文章将从官方 hooks 的使用、实现原理以及自定义 hooks 的结构化思路出发,全面理解 Vue 3 的 hooks 系统。 📘 1. Vue 3 官方生…

大语言模型 17 - MCP Model Context Protocol 介绍对比分析 基本环境配置

MCP 基本介绍 官方地址: https://modelcontextprotocol.io/introduction “MCP 是一种开放协议,旨在标准化应用程序向大型语言模型(LLM)提供上下文的方式。可以把 MCP 想象成 AI 应用程序的 USB-C 接口。就像 USB-C 提供了一种…

云原生安全之PaaS:从基础到实践的技术指南

🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 云原生安全之PaaS:从基础到实践的技术指南 一、基础概念 PaaS(Platform as a Service)平台 PaaS是一种云计算服务模型,为开发者提供应用程序的开发、部署和运行环境,涵…

Chrome中http被强转成https问题

原因:2023年11月1日,chrome发布HTTPS-Upgrades功能,在用户访问 http:// 的旧链接之后,会自动尝试跳转到通过加密的 https:// 协议,访问该网站。且探测到 https 服务存在也会自动改成 https。 亲测两种方案可行&#x…

Linux 操作文本文件列数据的常用命令

文章目录 Linux 操作文本文件列数据的常用命令基本列处理命令高级列处理列数据转换和排序列数据统计和分析 Linux 操作文本文件列数据的常用命令 Linux 提供了多种强大的命令来处理文本文件中的列数据,以下是一些最常用的命令和工具: 基本列处理命令 c…

如何理解线性判别分析(LDA)算法?

在高维数据空间中,特征变量呈指数级增长,信息分布密集且复杂。研究者在面对海量特征时,仿佛置身于一幅结构高度抽象且维度交织的多变量图景之中,其解析与建模犹如在一幅复杂的数据宇宙图谱中导航,既需理论框架的指引,也依赖于算法工具的精确刻画。如何从众多维度中筛选出…

鸿蒙UI开发——Builder函数的封装

1、问题引入 我们在开发中可能会遇到这样一个问题:将一个Builder修饰后的函数用变量或者数组记录下来,在业务其他地方使用这些Builder函数。 举个例子,有下面一段代码: Builderfunction builderElement() {}let builderArr: Fu…

ARM笔记-ARM指令集

第三章 ARM指令集 3.1 ARM指令集简介 ARM微处理器的ARM指令集 ,所有的指令长度都是32位 ,并且大多数指令都在一个单独指令周期内执行。 主要特点: 指令是条件执行的ARM微处理器的指令集是加载/存储型的在多寄存器操作指令中一次最多可以完成…