【Python爬虫基础教程 | 第一篇】URL、HTTP基础必知必会

news2025/3/9 23:21:27

前言

该专栏开设的目的在于给初学者提供一个学习爬虫的成长平台,文章涉及内容均为必备知识。

可订阅专栏:【Python爬虫教程】 | CSDN秋说

文章目录

    • 前言
    • URL概念及组成结构
    • HTTP概念简述
    • 浏览器接收资源
    • HTTP协议的结构
    • 请求结构
      • 请求行
      • 请求头
      • 请求体
      • 请求差异及参数说明
    • 响应结构
      • 状态行
      • 响应头
      • 响应体
    • 推广

URL概念及组成结构

在开始爬虫的开发实战前,需要了解的是URL的概念及组成结构,这具有基础性和必要性。

URL(Uniform Resource Locator,统一资源定位符)是用于在互联网上定位和标识资源的字符串。它提供了一种标准的方式来指示资源的位置和访问方式。

例如:https://blog.csdn.net/2301_77485708就是一个URL。通过URL,我们可以方便地定位和访问互联网上的各种资源,例如网页、图片、视频等。

URL的组成结构如下:

【1】协议(Protocol):URL的第一部分是协议标识符,它指定了访问资源时要使用的协议类型,如HTTP、HTTPS、FTP等。HTTP在文章后面会讲到

【2】主机名(Host):主机名指定了存放资源的服务器的域名或IP地址。例如,www.example.com 或 192.168.0.1。

【3】端口号(Port):端口号是可选的,用于指定特定服务的端口号。如果未指定,默认使用与协议相关的默认端口号(如HTTP的默认端口号是80)。

【4】路径(Path):路径指定了服务器上资源的具体位置。它以正斜杠(/)开头,可以包含多个目录层次和文件名。

【5】查询字符串(Query):查询字符串是可选的,用于向服务器传递参数。它以问号(?)开始,并以键值对的形式出现,每对之间使用&符号分隔。

【6】片段标识(Fragment):片段标识也是可选的,用于指定资源中的特定片段或锚点。它以井号(#)开始,后面跟着片段标识符。我们常见的URL是没有片段标识的。

示例URL:

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

在示例中,协议是HTTPS,主机名是www.example.com,端口号是8080,路径是/path/to/resource,查询字符串是param1=value1&param2=value2,片段标识是section1

通过URL,我们可以方便地定位和访问互联网上的各种资源,例如网页、图片、视频等。

HTTP概念简述

HTTP(Hypertext Transfer Protocol)协议,又称超文本传输协议,用于传输文本、图像、音频、视频以及其他多媒体文件。它是Web应用程序通信的基础,通过HTTP协议,Web浏览器可以向Web服务器发起请求,并接收来自Web服务器的响应,从而实现Web页面的访问和数据传输。

浏览器接收资源

当我们在浏览器中输入一个URL并按下回车键时,实际上触发了浏览器向相应网站服务器发送请求的过程。一旦服务器接收到这个请求,它会对请求进行处理和解析,然后生成相应的响应数据并将其发送回浏览器。

在返回的响应数据中,包含了页面的源代码和其他相关内容。浏览器接收到这些数据后,会对其进行解析和渲染,最终将页面内容呈现给用户。这个过程包括加载和显示页面中的文本、图像、样式表以及其他媒体元素,使用户能够浏览和与页面交互。

在请求一个页面时,打开浏览器检查中的network:

在这里插入图片描述

从中我们能看到很多条目,一个条目就代表一次发送请求和接收响应。

对于每列来说:

  • name【名称】:请求名称通常使用URL的最后一部分作为名称。

  • status【状态】:响应状态码为200,表示响应正常。

  • type【类型】:文档类型为"document",表明这次请求是获取一个HTML文档,其中包含HTML代码。

  • Initiator【发起者】:请求源指示了发起该请求的对象或进程。

  • Size【大小】:显示从服务器下载的文件和请求资源的大小。如果资源来自缓存,则显示为"from cache"。

  • time【时间】:总共用于发起请求并获取响应的时间。

  • waterfall【瀑布流图】:展示了网络请求的可视化瀑布流。

对每一个条目来说:

在这里插入图片描述

Request URL(请求URL): 这是发起请求的目标URL。

Request Method(请求方法): 这是指HTTP请求的方法,例如GET、POST、PUT、DELETE等。在这个例子中,请求方法是POST,表示向服务器提交数据。

Status Code(状态码): 这是服务器对请求处理后返回的状态码。在这里,状态码为204,表示服务器成功处理了请求,但没有返回任何内容。

Remote Address(远程地址): 这是指服务器的远程地址,即请求发送到的服务器的地址。在这个例子中,远程地址为127.0.0.1:7890,表示请求发送到本地计算机的7890端口。

Referrer Policy(引用页策略): 这个字段通常用来指示浏览器在发送请求时要包含的引用页信息。由于提供的信息不完整,无法具体解释其含义。

HTTP协议的结构

HTTP协议包含了HTTP请求和HTTP响应两个部分,其中HTTP请求由请求行、请求头和请求体组成;HTTP响应由状态行、响应头和响应体组成。HTTP协议还定义了一些请求方法,不同的请求方法对应不同的操作。

在这里插入图片描述

请求结构

如图为HTTP请求的完整结构(以GET请求为例):

在这里插入图片描述

请求行

HTTP请求中的首行称为请求行,其包括三个部分:请求方法、请求的资源路径和使用的协议版本。

GET /2301_77485708/article/details/136169661?spm=1001.2014.3001.5501 HTTP/1.1

在本例中请求方法为GET,请求路径URI为/2301_77485708/article/details/136169661?spm=1001.2014.3001.5501,协议Protocol为HTTP/1.1。

请求方法是在进行网络通信时,客户端向服务器发送请求的方式。

常见的请求方法有以下几种:

  1. GET:用于请求获取服务器上的资源,可以在请求中附加参数。一般用于获取数据。
  2. POST:用于向服务器提交数据,比如表单数据、上传文件等。
  3. PUT:用于向服务器上传或更新资源,通常需要提供完整的资源信息。
  4. DELETE:用于删除服务器上的资源。
  5. PATCH:用于对服务器上的资源进行部分更新。
  6. HEAD:类似于GET请求,但只返回响应头部信息,不返回实际内容。
  7. OPTIONS:用于获取目标资源支持的请求方法列表。

在提交如"ice"、"Sec"等不可识别的方法时,部分服务器支持以GET方法返回,即默认GET。

请求资源路径是指客户端在向服务器发起HTTP请求时,指定所要访问的资源在服务器上的路径信息。请求方法与URI之间通常以一个空格分隔。

为了在同一个服务器上的不同资源之间相互引用时简化URL的书写,并且避免需要在每个资源链接中都包含完整的URL,请求行中的资源路径为相对路径。

在本例中,请求的资源路径为:

/2301_77485708/article/details/136169661?spm=1001.2014.3001.5501

浏览器会将HOST与该路径自动填充,从而构建完整的URL进行请求。

出于跨平台兼容性等方面的考虑,换行符"\r\n"(回车符+换行符)被用作报文头部和报文主体之间以及各个字段之间的分隔符。

请求头

请求头(Headers)用于携带关于请求或响应的元数据信息。

  1. Accept:指定客户端能够处理的媒体类型,用于请求中。

  2. Content-Type:指定请求或响应中的实体的媒体类型。

  3. User-Agent:标识客户端的应用程序、操作系统和版本信息。

  4. Host:指定服务器的主机名和端口号。

  5. Cookie:包含在请求中发送的Cookie信息。

  6. Referer:指示请求来源页面的URL。

  7. Location:指定重定向的目标URL。

  8. Content-Length:指定请求或响应正文的长度(以字节为单位)。

  9. Content-Encoding:指定响应正文的编码方式,如gzip或deflate。

在本例中:

  1. Host: blog.csdn.net
    • 指定请求的目标主机,即要访问的服务器地址为blog.csdn.net。
  2. Cookie: ICE
    • 包含用户身份验证或其他相关信息。
  3. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/118.0
    • User-Agent字段包含了发送请求的客户端应用程序和操作系统的详细信息
  4. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,/;q=0.8
    • 表示客户端能够接受的媒体类型,优先顺序为text/html、application/xhtml+xml等。
  5. Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
    • 指定客户端接受的自然语言及其优先级,表示首选中文(中国)、次选中文(通用)等。
  6. Accept-Encoding: gzip, deflate, br
    • 表示客户端支持的内容编码方式,包括gzip、deflate和br(Brotli)。
  7. Referer: https://blog.csdn.net/2301_77485708/
    • 指示该请求来源页面的URL,即当前请求是从https://blog.csdn.net/2301_77485708/页面发起的。

请求体

请求体(Request Body)是客户端发起POST、PUT等请求时发送给服务器的数据部分。

请求体中包含客户端想要提交给服务器的数据,以表单、JSON、XML、二进制数据等格式存在。在POST请求中,请求体通常包含了表单数据或上传的文件;在PUT请求中,请求体通常包含了要更新的资源信息;在DELETE、GET请求中,请求体通常为空。

在下图的POST请求包中,存在请求体:

在这里插入图片描述

表示提交的ice.txt文件的内容为ice。

同时由上图可以看到,该POST上传格式为multipart/form-data,其有利于传输多个字段的数据。

Content-Type: multipart/form-data; boundary=---------------------------31280281959535052723427005512


-----------------------------31280281959535052723427005512
Content-Disposition: form-data; name="MAX_FILE_SIZE"

100000
-----------------------------31280281959535052723427005512
Content-Disposition: form-data; name="uploaded"; filename="ice.txt"
Content-Type: text/plain

ice
-----------------------------31280281959535052723427005512
Content-Disposition: form-data; name="Upload"

Upload
-----------------------------31280281959535052723427005512--

特殊的是,Content-Type中存在boundary,其定义了请求体中的分界线,使各部分数据相互独立互不干扰。若数据块中存在**filename=**字段,则表示上传文件,否则为POST参数。

请求差异及参数说明

POST请求头比GET请求头多引入了两个字段:Content-Length、Content-Type,分别指定请求体的长度及请求体内容类型。

在参数上,需要谨记的是:GET、POST参数的定义取决于参数所处位置。POST请求中,GET参数仍然存在于请求行中。

简单例题参考:https://blog.csdn.net/2301_77485708/article/details/130786891

在这里插入图片描述

响应结构

如图为HTTP响应的完整结构(以POST请求为例)

HTTP/1.1 200 OK
Server: nginx/1.15.11
Date: Mon, 19 Feb 2024 13:37:27 GMT
Content-Type: text/html;charset=utf-8
Connection: close
X-Powered-By: PHP/7.3.4
Pragma: no-cache
Cache-Control: no-cache, must-revalidate
Expires: Tue, 23 Jun 2009 12:00:00 GMT
Content-Length: 4134

<!DOCTYPE html>

<html lang="en-GB">

	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

		<title>Vulnerability: File Upload :: Damn Vulnerable Web Application (DVWA)</title>

		<link rel="stylesheet" type="text/css" href="../../dvwa/css/main.css" />

	</head>

</html>

在这里插入图片描述

状态行

HTTP/1.1 200 OK

响应结构中首行称为状态行,包括三个部分,分别是HTTP版本、状态码和状态消息。

  1. HTTP版本:指定使用的HTTP协议版本,例如HTTP/1.0、HTTP/1.1、HTTP/2等。
  2. 状态码(status code):指示对请求的处理结果,通常是一个3位数字,例如200表示成功,404表示未找到请求的资源等。
  3. 状态消息(reason phrase):对状态码的简要描述,通常是一个文本字符串,例如"OK"、"Not Found"等。状态消息不是HTTP协议必需的,但是它可以提供更多的信息。

附上状态码说明:

  • 1xx(信息性状态码):表示接收到请求并且正在处理。
    • 100 Continue: 继续。服务器已经接收到请求头,客户端应该继续发送请求体。
    • 101 Switching Protocols: 切换协议。服务器要求客户端切换协议,例如从HTTP协议切换到WebSocket协议。
  • 2xx(成功状态码):表示请求已成功处理。
    • 200 OK: 请求成功。服务器成功处理了请求。
    • 201 Created: 已创建。请求成功,并且服务器创建了新的资源。
    • 204 No Content: 无内容。服务器成功处理了请求,但没有返回任何内容。
  • 3xx(重定向状态码):表示需要进一步的操作来完成请求。
    • 301 Moved Permanently: 永久重定向。请求的资源已被永久移动到新位置。
    • 302 Found: 临时重定向。请求的资源暂时移动到新位置。
    • 304 Not Modified: 未修改。客户端发送了一个条件请求,服务器确认资源未被修改。
  • 4xx(客户端错误状态码):表示请求包含语法错误或无法完成请求。
    • 400 Bad Request: 错误的请求。服务器无法理解请求的语法。
    • 401 Unauthorized: 未授权。需要身份验证才能访问资源。
    • 404 Not Found: 未找到。请求的资源不存在。
  • 5xx(服务器错误状态码):表示服务器在处理请求时发生了错误。
    • 500 Internal Server Error: 内部服务器错误。服务器遇到了意外错误,无法完成请求。
    • 503 Service Unavailable: 服务不可用。服务器暂时无法处理请求,通常是因为过载或维护。

响应头

响应头用于提供关于响应的元数据和控制。

Content-Type:指定响应主体的媒体类型。

Content-Length:指定响应主体的长度(字节数)。

Server:指定服务器软件的名称和版本。

Date:指定响应产生的日期和时间。

Set-Cookie:在响应中设置一个或多个Cookie。

Location:用于重定向,指定新的URL地址。

Cache-Control:指定响应的缓存策略。

Content-Encoding:指定响应主体的内容编码方式。

Access-Control-Allow-Origin:用于跨域资源共享(CORS),指定允许访问资源的源。

响应体

响应体(Response Body)是服务器返回给客户端的数据部分。与响应头部分不同,响应体通常是必须要有的部分,因为它包含了客户端所请求的资源或执行结果的具体内容。

响应体的格式通常使用Content-Type首部字段来指定,而响应体的长度则使用Content-Length首部字段来指定。

在这里插入图片描述

在本例中,响应体的格式遵循HTML。

当响应体语言为HTML时,可将响应体复制后使用浏览器打开,获取直观界面,也可使用Burp中的Render功能:

在这里插入图片描述

推广

对于爬虫而言,IP池是十分重要的。

协采云是企业级代理服务器池方案提供商,产品线涵盖高性能代理服务器软件开发、部署与运维,并提供公共代理池租用与私有代理池定制等业务。

在这里插入图片描述

协采云是企业大客户代理IP池接入平台,全程私密供应,1v1客户经理对接,保障供应稳定的同时,也具备安全性。

协采云自2014年上线以来,以资源和技术服务双引擎动,助力数据效果优化,先后为近干家企业提供解决方案,目前客户已覆盖大数据、互联网传媒、征信、电商、金融、旅游、教育等行业。

在这里插入图片描述

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

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

相关文章

win10虚拟机安装驱动教程

在虚拟机菜单栏中选择安装VMware Tools&#xff1a; 安装好后&#xff0c;在虚拟机中打开此电脑&#xff0c;双击DVD驱动器进行安装&#xff1a; 一直点击下一步&#xff1a; 安装完成&#xff1a; 此时重启虚拟机&#xff0c;发面小屏幕页面的虚拟机自动占满了全部屏幕&#x…

Java Web开发从0到1

文章目录 总纲第1章 Java Web应用开发概述1.1 程序开发体系结构1.1.1 C/S体系结构介绍1.1.2 B/S体系结构介绍1.1.3 两种体系结构的比较1.2 Web应用程序的工作原理1.3 Web应用技术1.3.1 客服端应用技术1.3.2 服务端应用技术1.4 Java Web应用的开发环境变量1.5 Tomcat的安装与配置…

OpenCV(八)——基本线条操作

基本线条操作 OpenCV中提供了基本的线条的操作&#xff0c;包括画直线、画矩形、画圆形等。 &#xff08;1&#xff09;画直线&#xff0c;在OpenCV中利用line()画直线&#xff0c;形式为image_with_line cv2.line(image, start_point, end_point, color, thickness)。line(…

使用 Docker Compose 快速搭建监控网站 uptime-kuma

有时候需要监控自己搭建的一些网站、服务是否正常运行&#xff0c; 这时候可以考虑使用一个监控网站&#xff0c; 定时的进行检测&#xff0c; 记录网站、服务的运行状态&#xff0c; 在这推荐使用 uptime-kuma。 博主博客 https://blog.uso6.comhttps://blog.csdn.net/dxk539…

学生打架支小蜜AI校园防欺凌系统可以识别到吗?

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;已经渗透到我们生活的方方面面&#xff0c;为我们的生活带来了极大的便利。在校园安全领域&#xff0c;AI技术的应用也日益广泛&#xff0c;其中&#xff0c;AI校园防欺凌系统更是受到了广泛关注。那么&#…

【SystemVerilog】结构体真是太好用了~

前言 Verilog最大的缺陷之一是没有数据结构。在SystemVerilog中可以使用struct创建结构&#xff0c;struct只是把数据组织到一起&#xff0c;是数据的集合&#xff0c;所以是可综合的。 结构体是可以通过模块接口进行传递的&#xff0c;这就是本文想描述的内容。 一、结构体的…

进程及进程状态

1.PCB及task_struct 进程信息被放在一个叫做进程控制块的数据结构中&#xff0c;可以理解为进程属性的集合。 书上称之为 PCB &#xff08; process control block &#xff09;&#xff0c; Linux 操作系统下的 PCB 是 : task_struct。 task_struct是PCB的一种。 task_struc…

MySQL教程-安装与卸载

MySQL官网 https://www.mysql.com MySQL 官方提供了两种不同的版本&#xff1a; 社区版 MySQL Community Server&#xff0c;免费&#xff0c;但不提供任何技术支持商业版 MySQL Enterprise Server&#xff0c;收费&#xff0c;官方可提供技术支持 本教程采用MySQL的社区版作…

看!Chat4.0如何看待AI与光纤资源管理软件的应用结合点及价值

问&#xff1a;你好&#xff0c;AI在光纤资源管理软件中有那些应用结合点&#xff0c;请详细描述应用结合点及价值? 答&#xff1a;AI在光纤资源管理软件中的应用结合点涉及多个方面&#xff0c;它们通过智能化的手段提高资源管理的效率和准确性。以下是一些关键的应用结合点及…

阿里云服务器centos安装msf教程

msf官方命令行一键安装 curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall && chmod 755 msfinstall && ./msfinstall 稍微等待几分钟即可安装成功&am…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Progress)

进度条组件&#xff0c;用于显示内容加载或操作处理等进度。 说明&#xff1a; 该组件从API version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 无 接口 Progress(options: ProgressOptions<Type>) 创建进度组件&a…

VGG网络的代码实现

VGG网络的程序实现完全根据配置表来实现。 全连接层之前的部分属于特征提取部分&#xff0c;后三部分全连接层用来分类。 1、模型 import torch.nn as nn import torch# official pretrain weights #预训练的权重下载地址 model_urls {vgg11: https://download.pytorch.org/…

使用opencv进行图片分析

opencv学习 一、配置环境并打开编译器 配置opencv在你的任意一个盘里创建一个专属于opencv的文件夹便于学习与整理 打开控制台winr输入cmd&#xff0c;进入后输入conda activate opencv&#xff0c;进入环境以后进入你所设置的opencv文件的盘&#xff0c;我的是D盘&#xff0…

fastreport循环数据表

1.创建数据源 2.将数据源关联到数据区 3.配置控件及属性 拖拽文本控件&#xff0c;设置文本控件的style属性为Data 4.比对效果 比对数据库和报表的数据一致。且循环显示。 数据库数据 报表展示数据

【Qt】从QMainWindow到UI框架

目录 简介UI布局元素Central WidgetMenu BarToolbarsStatus BarDock Widgets 参考文档 简介 如下图所示&#xff0c;我们常见的一些desktop软件&#xff0c;比如VS Code、Smart VCI等&#xff0c;一般都会包含顶部的菜单栏&#xff0c;底部的状态栏&#xff0c;以及一些其他UI…

工业制造领域系统:SCADA、PLC、DCS、MES、HMI、ERP等,一文秒懂

工业制造控制系统在工业制造领域起到了关键的作用&#xff0c;帮助企业提高生产效率、降低成本、提高产品质量和安全性。不同的企业根据自身需求和规模&#xff0c;可能会选择使用其中的一种或多种系统。 SCADA系统&#xff08;Supervisory Control and Data Acquisition&…

第2章 信息技术基础

本章学习要点 全面了解医院信息系统建设所涉及的主要信息技术以及这些技术的应用情况。 计算机与网络、信息技术与信息系统、数字媒体与数据存储技术、条形码(二维码)、RFID技术、云计算、APP技术 1.XML 可扩展标记语言与Access&#xff0c;Oracle和SQL Server等数据库不同…

什么软件可以剪辑录音?录音剪辑推荐3款工具

随着数字技术的发展&#xff0c;录音已经成为我们日常生活和工作中不可或缺的一部分。无论是会议记录、课堂笔记&#xff0c;还是音乐创作、语音聊天&#xff0c;我们都需要用到录音功能。然而&#xff0c;单纯的录音往往不能满足我们的需求&#xff0c;我们还需要对录音进行剪…

常用芯片学习——TP4057电源管理芯片

TP40578 500mA线性锂离子电池充电器 芯片介绍 TP4057是一款性能优异的单节锂离子电池恒流/恒压线性充电器。TP4057采用S0T23-6封装配合较少的外围原件使其非常适用于便携式产品&#xff0c;并且适合给USB电源以及适配器电源供电。 基于特殊的内部MOSFET架构以及防倒充电路&a…

图像处理与视觉感知---期末复习重点(3)

文章目录 一、空间域和频率域二、傅里叶变换三、频率域图像增强 一、空间域和频率域 1. 空间域&#xff1a;即所说的像素域&#xff0c;在空间域的处理就是在像素级的处理&#xff0c;如在像素级的图像叠加。通过傅立叶变换后&#xff0c;得到的是图像的频谱&#xff0c;表示图…