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:**重定向目标地址
3. Cookie 与会话相关
**· 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 会话,否则容易掉线、被判定异地登录 |
| 并发与频率 | 人工操作,速度慢、间隔随机 | 可高并发、高速访问,极易触发限流 / 封禁 |
| 目的 | 给人看,追求体验 | 给程序提取数据,追求效率 |