Python 爬虫 · http 协议基础

Python 学习第 27 天:


一、http vs https

1. http 超文本传输协议

**· 默认端口:**80

**· 超文本:**超过文本,意指不仅限于文本,还包括图片、音频、视频等文件

**· 传输协议:**使用约定好的固定格式来转递转换或字符串的超文本内容

**注意:**http 采用明文传输,也就是说在传输过程中,如果超文本内容被截取,截取方可以直接读取其内容,具有极大的不安全性。

2. https 具有安全套接字层的超文本传输协议

**·**http + ssl(安全套接字层)

**· 默认端口:**443

**·**ssl 用于对传输的内容(超文本,也就是请求体或响应体)进行加密

二、爬虫关注的请求头

1. 必带 / 最容易被封

**· User - Agent:**标识浏览器 / 设备,如果不带,基本会被拦截;

**· Referer:**标识从哪个界面跳转,用于站点校验;

**· Origin:**常用于跨域请求,主要用于 POST、接口请求;

**· Host:**目标域名,requests 会自动带,但在手动构造时需要注意标注。

2. 登录 / 权限相关

**· Cookie:**登录态、会话标识,很多数据必须带 Cookie 才能爬;

**· Authorization:**Token 认证,常见于 RESTful / 小程序 / App 端口。

3. 反爬高频检测项

**· Accept:**接受的数据类型有 text、html、application、json 等;

**· Accept - Language:**语言 zh - CN,zh;q=0.9;

**· Accept - Encoding:**压缩方式 gzip、deflate、br;

**· Content - Type:**POST 提交时必须正确。

**表单:**application / x - www - form - urlencoded

**JSON:**application / json;

**FormData:**multipart / form - data。

4. 进阶反扒 / 风控常用

**· X - Requested - With:**标识 AJAX,XMLHttpRequest;

**· Sec - Fetch - Site / Sec - Fetch - Mode / Sec - Fetch - Dest:**浏览器安全指纹,用于现代站点检验;

**· DNT:**Do Not Tiack,可有可无,但带上会让爬虫更像 "真人"。

5. 移动端 / APP 爬虫常用

· X - Requested - With

**·**将 User - Agent 改为 手机 / APP

**·**自定义头:token / device - id / vuid / sign

三、爬虫关注的相应头

1. 状态与结果相关

**· Status Code:**状态码

**200:**成功;

**301:**永久重定向(Permanent Redirect),旧地址彻底废弃,浏览器会记住新地址,以后直接访问新地址。方法:GET 请求会保留,POST 会变成 GET;

**302:**临时跳转,新的 url 在响应的 Location 头中给出。方法:POST 可能变成 GET;

**303:**浏览器对于 POST 的响应进行重定向至新的 url。强制使用 GET 访问新地址;

**307:**临时重定向(Temporary Redirect),严格保留原请求方法(POST 还是 POST,不会变)。不会修改请求方式;

**308:**永久重定向(Permanent Redirect),严格保留原请求方法(POST 永远是 POST,不会变)。永久跳转,且不改变请求方式;

403: 资源不可用 / 服务器理解客户的请求,但拒绝处理,即客户无权限;

404: 找不到该界面;

500: 服务器内部错误;

**503:**服务器由于维护或负载过量未能应答。

2. 重定向相关

**· Location:**重定向目标地址

**· Set - Cookie:**服务器设置新 Cookie,必须在爬虫时自动保存或在后续请求中带上,否则会导致会话丢失、登陆失败、触发反爬等

4. 内容与编码相关

**· Content - Type:**返回内容的类型 text / html ; charset = utf - 8、application / json、image / png、application / octet - stream

**· Content - Encoding:**反映是否压缩,gizp、br、requests 会自动解压

**· Content - Length:**反映内容大小,用于下载、判断是否完整

5. 缓存控制相关

**· Cache - Control:**用于控制是否缓存,no - cache、max - age = 等

**· Expires:**反映资源过期时间

**· Etag / Last - Modified:**用于协商缓存,爬虫可用于判断页面是否更新

6. 反爬与风控相关

**· Server:**反映服务器信息,有时能看出用了什么防护

**· Via / X - Powered - By:**中间代理、框架信息

**· WWW - Authenticate:**反映需要身份验证

**· Set - Cookie 里的特殊字符:**如典型风控标识 __cfduid、__RequestVerificationToken、sessionid 等

7. 下载与附件相关

**· Content - Disposition:**如表示下载文件 attachment、filename = "xxx.zip"

8. 跨域与安全相关

**· X - Frame - Options:**反映是否允许 iframe 嵌套

**· X - XSS - Protection / X - Content - Type - Options:**反映安全策略,可以辅助判断站点防护程度

9. 页面刷新相关

**· Refresh:**自动跳转页面,如 Refresh: 5 ; url = ...

四、浏览器 vs 爬虫爬取

浏览器与爬虫爬取本质上都是向服务器发起请求、接收响应、解析数据,也都使用想用的网络协议,请求头、响应头、状态码、Cookie、重定向机制都完全一样。它们的目标都是获取服务器资源,如网页、图片、接口数据、文件等。且都会被服务器反爬策略检测,如 UA、Cookie、访问频率、行为特征都会被风控识别。但它们之间的区别在于:

|---------------------|-----------------------------------------------|-------------------------------------------------------------------------|
| | 浏览器 | 爬虫爬取 |
| 是否执行 JavaScript | 是,执行 JS,加载 CSS、图片、发起异步请求(AJAX / fetch) | 否,不执行 JS,只获取原始 HTML。看不到动态加载内容。想要动态内容必须用 Selenium、Playwright、Pyppeteer 等 |
| 是否渲染页面 | 是,渲染成可视化界面 | 否 |
| 请求行为特征 | 一次打开页面会开发请求几十次资源(JS / 图片 / 字体),行为自然 | 通常之请求目标接口 / 页面,请求序列单一、频率高、无鼠标行为,容易被风控识别 |
| 请求头与指纹 | 自带完整请求头 + 浏览器指纹(UA、Sec - Fetch、Canvas、WebGL等) | 请求头往往不完整,指纹缺失,容易被识别为机器 |
| Cookie 与会话管理 | 自动管理 Cookie,自动携带、自动更新 Set - Cookie | 需要手动维护 Coo/kie 会话,否则容易掉线、被判定异地登录 |
| 并发与频率 | 人工操作,速度慢、间隔随机 | 可高并发、高速访问,极易触发限流 / 封禁 |
| 目的 | 给人看,追求体验 | 给程序提取数据,追求效率 |

相关推荐
zhangchaoxies5 分钟前
如何在 Go 中安全复制接口指针所指向的值
jvm·数据库·python
曲幽14 分钟前
FastAPI + Pydantic 模型终极实战手册:从能跑就行到固若金汤,这些技巧你一定用得上
python·fastapi·web·model·field·pydantic·validator·basemodel
计算机软件程序设计1 小时前
Python Flask工程目录解读
python·flask·工程目录解读
Ares-Wang1 小时前
Flask》》 Flask-OpenID 认证、 OpenID Connect (OIDC)
后端·python·flask
m0_734949791 小时前
怎么利用Navicat进行调整备份文件压缩等级_详细配置与操作步骤
jvm·数据库·python
m0_741173332 小时前
如何处理SQL中的NULL值_使用ISNULL或COALESCE函数
jvm·数据库·python
AC赳赳老秦2 小时前
OpenClaw进阶技巧:批量修改文件内容、替换关键词,解放双手
java·linux·人工智能·python·算法·测试用例·openclaw
步辞2 小时前
css伪类选择器-nth-child应用技巧_循环选择列表或表格行的实现方法
jvm·数据库·python
xcbrand3 小时前
快消品品牌策划公司哪家好
大数据·人工智能·python
2301_803875613 小时前
Python怎么计算NumPy数组的切比雪夫距离_使用abs与max求解
jvm·数据库·python