赞
踩
该专栏开设的目的在于给初学者提供一个学习爬虫的成长平台,文章涉及内容均为必备知识。
可订阅专栏:【Python爬虫教程】 | CSDN秋说
在开始爬虫的开发实战前,需要了解的是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¶m2=value2#section1
在示例中,协议是HTTPS
,主机名是www.example.com
,端口号是8080
,路径是/path/to/resource
,查询字符串是param1=value1¶m2=value2
,片段标识是section1
。
通过URL,我们可以方便地定位和访问互联网上的各种资源,例如网页、图片、视频等。
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请求的完整结构(以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。
请求方法是在进行网络通信时,客户端向服务器发送请求的方式。
常见的请求方法有以下几种:
在提交如"ice"、"Sec"等不可识别的方法时,部分服务器支持以GET方法返回,即默认GET。
请求资源路径是指客户端在向服务器发起HTTP请求时,指定所要访问的资源在服务器上的路径信息。请求方法与URI之间通常以一个空格分隔。
为了在同一个服务器上的不同资源之间相互引用时简化URL的书写,并且避免需要在每个资源链接中都包含完整的URL,请求行中的资源路径为相对路径。
在本例中,请求的资源路径为:
/2301_77485708/article/details/136169661?spm=1001.2014.3001.5501
浏览器会将HOST与该路径自动填充,从而构建完整的URL进行请求。
出于跨平台兼容性等方面的考虑,换行符"\r\n"(回车符+换行符)被用作报文头部和报文主体之间以及各个字段之间的分隔符。
请求头(Headers)用于携带关于请求或响应的元数据信息。
Accept:指定客户端能够处理的媒体类型,用于请求中。
Content-Type:指定请求或响应中的实体的媒体类型。
User-Agent:标识客户端的应用程序、操作系统和版本信息。
Host:指定服务器的主机名和端口号。
Cookie:包含在请求中发送的Cookie信息。
Referer:指示请求来源页面的URL。
Location:指定重定向的目标URL。
Content-Length:指定请求或响应正文的长度(以字节为单位)。
Content-Encoding:指定响应正文的编码方式,如gzip或deflate。
在本例中:
请求体(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版本、状态码和状态消息。
附上状态码说明:
响应头用于提供关于响应的元数据和控制。
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年上线以来,以资源和技术服务双引擎动,助力数据效果优化,先后为近干家企业提供解决方案,目前客户已覆盖大数据、互联网传媒、征信、电商、金融、旅游、教育等行业。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。