Skip to main content

第一课:网络基本知识

(一)关于网络请求

1. URL

一个网址(URL)的内容一般如下: http://www.baidu.com:80 ( 一般默认端口号是80 )

  • 在符号#后面表示锚点, 会跳转到指定页面的特点区间,比如: item.jd.com/11936238.html#product-detail

  • 在符号?后面表示输入参数,比如: www.baidu.com/s?wd=hello 就会搜索‘hello’


2. HTTP请求的格式

部分详情
请求行(Request Line):请求行包含了请求的方法、请求的URL(统一资源定位符)和协议版本GET /example-page.html HTTP/1.1
请求头(Request Headers):请求头包含了关于请求的附加信息,以键值对的形式呈现,每个键值对由冒号分隔HeaderName: HeaderValue
示例请求头User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.0.0 Safari/537.36
Content-Type: application/json
请求体(Request Body):对于一些HTTP请求,例如POST请求,请求体包含了要发送给服务器的数据。请求体的格式取决于请求的内容类型(Content-Type)。{"key1": "value1", "key2": "value2"}

3. 状态码

状态代码描述
1xx (Informational)请求正在处理或需要进一步的信息。
100 Continue服务器已接收了部分请求,客户端应该继续发送请求的其余部分。
2xx (Successful)请求已成功接收、理解和处理。
200 OK表示请求成功,服务器已成功处理了请求,并返回了所请求的资源。
201 Created表示请求已经被成功处理,并且服务器已创建了一个新的资源,通常在创建资源成功时使用。
204 No Content表示请求已成功处理,但服务器没有返回任何内容,通常在处理DELETE请求等时使用。
3xx (Redirection)客户端需要采取进一步的操作来完成请求。
301 Moved Permanently请求的资源已永久移动到新的URL,客户端应该更新其链接。
4xx (Client Error)客户端发送的请求有错误。
400 Bad Request表示请求有语法错误或无法理解服务器的请求。
401 Unauthorized表示需要进行身份验证才能访问资源,客户端需要提供有效的身份验证信息。
403 Forbidden表示服务器理解请求,但拒绝执行该请求,通常是因为权限不足。
404 Not Found表示请求的资源不存在,服务器未能找到所请求的资源。
5xx (Server Error)服务器在处理请求时出现了错误。
500 Internal Server Server表示服务器在处理请求时发生了内部错误,通常是服务器出现问题。
502 Bad Gateway表示服务器作为网关或代理,从上游服务器接收到无效的响应。
503 Service Unavailable表示服务器当前无法处理请求,通常是由于服务器过载或维护等原因。

4. response headers响应标头

头部字段描述
Cache-Control: must-revalidate, no-cache, private指示客户端和代理服务器如何缓存响应。must-revalidate 表示必须重新验证缓存,no-cache 表示不允许缓存,private 表示响应只能被单个用户缓存。
Connection: keep-alive表示客户端与服务器之间的连接状态。keep-alive 表示客户端要求保持连接以复用该连接,以减少后续请求的延迟。
Content-Encoding: br表示响应主体的内容编码方式。br 表示使用 Brotli 压缩算法进行编码。
Content-Type: text/html; charset=utf-8表示响应主体的内容类型。text/html; charset=utf-8 表示响应是HTML文档,字符集为UTF-8。
Date: Thu, 16 Nov 2023 02:56:38 GMT表示响应的日期和时间,用于缓存和验证响应的新鲜度。
Expires: Sun, 1 Jan 2006 01:00:00 GMT表示响应的过期时间。设置为一个已经过去的时间,意味着该响应已经过期,不能再被缓存使用。
Keep-Alive: timeout=30设置了与服务器的连接保持时间,timeout=30 表示在没有活动的情况下,连接将在30秒后关闭。
Pragma: no-cache一个旧的HTTP头部字段,通常用于控制缓存行为。no-cache 表示不允许缓存。
Server: dae表示服务器的标识。
Set-Cookie: ck="deleted"; max-age=0; domain=.douban.com; expires=Thu, 01-Jan-1970 00:00:00 GMT; path=/用于在客户端设置或删除Cookie,这里删除了名为 "ck" 的Cookie。
Set-Cookie: dbcl2="deleted"; max-age=0; domain=.douban.com; expires=Thu, 01-Jan-1970 00:00:00 GMT; path=/用于在客户端设置或删除Cookie,这里删除了名为 "dbcl2" 的Cookie。
Strict-Transport-Security: max-age=15552000;设置了严格传输安全性策略,max-age=15552000 表示在接下来的约半年内,浏览器只能通过HTTPS连接来访问该站点。
Transfer-Encoding: chunked表示响应主体的传输编码方式,chunked 表示响应主体以分块方式传输。
X-Dae-App: sns自定义的HTTP头部,用于传递额外的信息或安全策略。
X-Dae-Instance: home自定义的HTTP头部,用于传递额外的信息或安全策略。
X-Dae-Mountpoint: True自定义的HTTP头部,用于传递额外的信息或安全策略。
X-Douban-Mobileapp: 0自定义的HTTP头部,用于传递额外的信息或安全策略。
X-Frame-Options: SAMEORIGIN自定义的HTTP头部,用于传递额外的信息或安全策略。
X-Xss-Protection: 1; mode=block自定义的HTTP头部,用于传递额外的信息或安全策略。

5. request headers请求标头

头部字段描述
Accept: text/html,application/xhtml+xml,application/xml; q=0.9,image/webp,image/apng,/; q=0.8,application/signed-exchange;v=b3;q=0.7指示客户端可以接受的响应内容类型(MIME类型)。可以接受HTML文档、XHTML文档、XML文档、WebP图片等,其中q参数表示了对各种类型的优先级,数字越高表示优先级越高。
Accept-Encoding: gzip, deflate, br指示客户端支持的响应内容编码方式,例如gzip、deflate和br(Brotli压缩算法)。服务器可以根据这个字段来选择合适的内容编码方式以减小传输大小。
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6指示客户端首选的响应内容语言。首选语言是中文(zh-CN)和英语(en),其中q参数表示了对各种语言的优先级,数字越高表示优先级越高。
Connection: keep-alive表示客户端与服务器之间的连接状态。keep-alive表示客户端要求保持连接以复用该连接,以减少后续请求的延迟。
Cookie: ll="118172"; bid=_U1E8CXk3y0; __utmz=30149280.1697636418.1.1.utmcsr=cn.bing.comutmccn=(referral)
Host: www.douban.com指定了目标服务器的主机名,这是HTTP/1.1中的必选字段。
Sec-Ch-Ua: "Microsoft Edge";v="119", "Chromium";v="119", "Not?A_Brand";v="24"它是用于指示浏览器和操作系统信息的头部。表示浏览器是Microsoft Edge和Chromium的一个变体。
Sec-Ch-Ua-Mobile: ?0——
Sec-Ch-Ua-Platform: "Windows"——
Sec-Fetch-Dest: documentSec-Fetch相关字段用于指示请求的来源和模式。Sec-Fetch-Dest表示请求的目标是文档。
Sec-Fetch-Mode: navigateSec-Fetch-Mode表示请求的模式是导航。
Sec-Fetch-Site: none——
Sec-Fetch-User: ?1——
Upgrade-Insecure-Requests: 1指示浏览器在HTTP页面上自动升级到HTTPS请求,以增强安全性。
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0包含了客户端的用户代理信息,用于标识客户端的类型和版本。表示客户端是运行在Windows NT 10.0操作系统上的Microsoft Edge浏览器。

6. request.get() 中包含的参数:

参数名类型描述
url字符串必需。表示要请求的目标URL。
params字典或字节序列可选。用于向URL添加查询参数,允许在GET请求中传递数据,如搜索关键字或过滤条件。
headers字典可选。用于设置HTTP请求头部信息,如User-Agent、Accept-Language等,模拟不同类型的客户端。
cookies字典或CookieJar对象可选。用于设置请求中的Cookie信息,通常用于身份验证或会话管理。
auth元组可选。用于进行身份验证的元组,通常包括用户名和密码。
timeout浮点数可选。用于设置请求的超时时间,单位是秒。如果在指定时间内未收到响应,则会引发超时异常。
allow_redirects布尔值可选。指示是否允许自动重定向。如果设置为True(默认值),则请求会自动遵循服务器返回的重定向响应。
proxies字典可选。用于设置代理服务器的配置,以实现通过代理进行请求。
verify布尔值或字符串可选。用于控制SSL证书验证。True(默认)验证SSL证书的有效性,False禁用验证,或指定自定义CA证书文件路径。
stream布尔值可选。用于指示是否以流的方式获取响应内容。如果设置为True,则只下载响应头部信息,按需下载响应内容。

7. 顶级域名

顶级域名(Top-Level Domain,TLD)是互联网域名系统(DNS)中的最高级别域名分类,它位于域名的最右侧,用于标识域名的类型或国家/地区。
主要的顶级域名包括以下几种类型:

类型描述示例
通用顶级域名 (gTLDs)用于表示不特定于国家/地区的域名类型。.com:商业
.org:非营利组织
.net:网络服务提供商
.gov:政府机构
.edu:教育机构
.mil:军事机构
.int:国际组织
.info:信息资源
.biz:商业用途
国家和地区顶级域名 (ccTLDs)用于表示特定国家或地区的域名。.us:美国
.uk:英国
.de:德国
.jp:日本
.cn:中国
新通用顶级域名 (new gTLDs)相对较新的顶级域名,引入了更多的多样性和选择。.app.blog.guru.io
基础设施顶级域名用于表示互联网基础设施。.arpa(用于逆向域名解析)

8. 不同的文件类型

请求类型用途包含的数据类型
XHR (XMLHttpRequest)由JavaScript通过XMLHttpRequest对象发送的请求。用于在不刷新网页的情况下加载或提交数据,实现异步通信。常用于获取JSON数据或XML数据。
webp图像格式,用于提高网页上图像的压缩效率和加载速度。包含图像数据,用于显示网页上的图像。
preflight (OPTIONS)CORS(跨源资源共享)机制中的预检请求。用于确定是否允许跨源请求。不包含实际数据,用于验证跨域请求的合法性。
fetch现代的网络请求API,用于在JavaScript中发起HTTP请求。可用于获取JSON、HTML、XML、文本等数据。
document获取整个HTML文档的请求。当访问网页时,浏览器通过此请求获取网页内容。包含整个HTML文档,包括网页的结构和内容。
audio用于获取音频文件,以便在网页上播放声音或音乐。包含音频文件数据,用于在网页上播放音频。
stylesheet用于获取网页的样式表(CSS文件)。定义了网页的外观和布局。包含CSS文件数据,用于渲染网页的样式。

9. 异步通信

异步通信的特点是不需要等待一个操作完成,而可以同时执行其他操作。

在网页开发中,异步通信通常是指浏览器通过JavaScript发起的网络请求,而不会阻止或中断页面的其他操作。 例如,当用户点击一个按钮时,网页可以通过异步通信发送请求到服务器,而不会阻止用户继续与页面交互。


10. CSS文件

CSS文件是一种用于定义网页样式和布局的文件。

它包含了一系列的规则和属性,用于指定网页元素的外观,例如文本的颜色、字体、元素的大小和位置、背景颜色等等。

CSS文件与HTML文件一起工作,HTML用于定义网页的内容结构,而CSS则用于定义如何呈现这些内容。

通过将样式信息存储在独立的CSS文件中,可以实现样式的复用,以及对整个网站的一致性管理。

通常,你可以在HTML文件中链接一个外部的CSS文件,也可以在HTML文档内部使用<style>标签嵌入CSS代码。


11. 格式化数据和非格式化数据

格式化数据:就是json格式数据,JSON 的基本格式是:

对象(Object):表示为键值对,写在大括号 中。每个键后面跟着一个冒号,键值对之间用逗号分隔。

示例:{"name": "John", "age": 30}

数组(Array):有序的值列表,写在方括号 [] 中,值之间用逗号分隔。

示例:["apple", "banana", "cherry"]

是否是json格式数据可以用 print(response.json()) 来检测,报错就不是非结构化数据

json格式数据可以转化为字典来进行分析

格式化数据:比如html文件,txt文件

可以使用xpath,xml,正则表达式来分析

12. 分析Ajax请求

Ajax(Asynchronous JavaScript and XML)是一种在网页浏览器中执行异步请求的技术。在很多现代网站中,Ajax 用于在不重新加载整个页面的情况下动态地从服务器加载新数据。

如何分析 Ajax 请求:

  1. 使用浏览器的开发者工具(通常通过按 F12 打开)。
  2. 转到“网络”(Network)标签。
  3. 进行触发 Ajax 请求的操作(例如点击一个按钮或滚动页面)。
  4. 观察网络活动,特别是查找由 XHR(XMLHttpRequest)或 Fetch 触发的请求。
  5. 分析这些请求的 URL、请求方法(GET 或 POST)、请求参数以及响应数据。

模拟 Ajax 请求:
一旦你理解了 Ajax 请求的工作方式,你可以使用像 requests(Python)这样的库来模拟这些请求。
重要的是要正确设置请求的头部(Headers)和参数(Params),以确保你的请求被服务器接受。

13. Headless vs 非 Headless

"Headless" 指的是在没有图形用户界面(GUI)的情况下运行浏览器。

在 headless 模式下,浏览器不会显示出来,但仍然可以执行页面渲染、JavaScript 等操作。

相比之下,非 headless(或“有头”)模式则是指浏览器以正常的、可视化的方式运行。

Headless 模式:

性能更优,因为不需要渲染用户界面。适合服务器环境,没有显示屏或图形界面的系统。适合自动化测试、爬虫等后台任务。

非 Headless 模式:

性能消耗相对较高,因为涉及到图形界面的渲染。可以直接看到浏览器的操作,便于调试和演示。用户界面交互更直观。