Python HTTPS 爬虫实战,requests aiohttp Selenium 抓取技巧、HTTPS 问题与抓包调试(python https爬虫、反爬、抓包、证书处理)

news/2025/9/26 9:59:01/文章来源:https://www.cnblogs.com/X15512549546/p/19112948

在爬虫实战里,遇到 HTTPS 站点是日常。HTTPS 本质上在传输层加密,但对爬虫影响主要落在证书验证、重定向、HTTP/2、SNI、压缩以及反爬策略上。本文面向工程实现,讲清用 Python 抓 HTTPS 的常见方案、实用代码、遇到证书/加密/反爬时的处理办法,以及如何用抓包工具定位问题(包含在移动端或真机场景下用 抓包大师 Sniffmaster 的补充方法)。


一、常见工具与选型

  • requests:同步、易上手,适合普通页面与 API。
  • aiohttp / httpx (async):并发抓取,高吞吐场景首选。
  • Selenium / Playwright:渲染 JS、处理复杂交互与验证码。
  • mitmproxy / Charles / Fiddler:抓包与调试 HTTPS 请求;mitmproxy 支持 Python 脚本化。
  • tcpdump/Wireshark/Sniffmaster:遇到 TLS 握手失败或移动端问题时做底层/真机抓包。

二、基础代码示例(requests 与证书校验)

import requestsurl = "https://example.com/api"
s = requests.Session()
s.headers.update({"User-Agent": "Mozilla/5.0 (compatible)"})
resp = s.get(url, timeout=10)  # 默认 verify=True,会校验证书
print(resp.status_code, resp.headers.get('content-type'))

如果遇到自签或测试证书,可指定 CA 文件:

resp = s.get(url, verify="/path/to/ca_bundle.pem")

切记verify=False 可临时调试,但有安全风险,不应用于生产。


三、并发抓取(aiohttp 快速示例)

import asyncio, aiohttpasync def fetch(session, url):async with session.get(url, ssl=True) as r:return await r.text()async def main(urls):async with aiohttp.ClientSession() as session:tasks = [fetch(session, u) for u in urls]res = await asyncio.gather(*tasks)print(len(res))# asyncio.run(main(list_of_urls))

aiohttp 可以传入自定义 ssl 上下文以处理证书问题或 SNI。


四、常见 HTTPS 与抓取问题及对策

1) 证书验证失败(CERTIFICATE_VERIFY_FAILED

  • 检查本机 certifi 是否最新;在受控测试环境使用自建 CA 并把 CA 导入系统/requests 的 CA bundle。
  • openssl s_client -connect host:443 -servername host 查看服务器证书链。
  • 使用 Session() 保持 cookie。很多接口签名会把时间戳、nonce 与 cookie 联动,务必统一会话并重试策略。

3) 压缩/编码显示为乱码

  • 检查 Content-Encoding(gzip、br),requests/aiohttp 通常会自动解压;若返回二进制(protobuf/图片),用对应解析器处理。

4) HTTP/2 / TLS 特性

  • requests 默认走 HTTP/1.1;若需 HTTP/2 可使用 httpxhyper,部分站点仅在 HTTP/2 下才返回期望内容。

5) SNI 与多域名

  • 使用支持 SNI 的 OpenSSL(大多现代 Python 都支持);若遇到证书与域名不一致,检查客户端请求中的 servername

五、应对反爬与抗封策略(工程化)

  • Header 与 UA 升级:伪装常用浏览器 UA、Referer、Accept-Language。
  • IP 轮换/代理池:短期用高匿名代理并控制速率;对于重要项目,使用付费代理并统计失效率。
  • 请求速率与随机延迟:尊重 robots.txt、避免高并发短时突发。
  • 浏览器行为模拟:用 Selenium/Playwright 渲染并执行 JS、触发浏览器指纹(但需控制并发与资源)。
  • 验证码:优先避免触发,必要时结合人工/第三方识别服务。
  • 签名逆向:如果接口有签名算法,逆向客户端 JS / APP 签名逻辑或使用同构环境复现签名(注意合规)。

六、抓包与调试 HTTPS 的实际流程

  1. 本地用 requests 发请求并复现问题。
  2. mitmproxy 或 Charles 做代理抓包,观察请求头、TLS 握手、重定向与响应体。mitmproxy 支持写脚本修改请求并记录日志。
  3. 当代理看不到流量或 App/移动端行为异常,可能是 Pinning、mTLS 或 App 使用原始套接字:这时需要真机抓包或底层抓包
    • 桌面可用 tcpdump + Wireshark 分析 ClientHello/Alert。
    • iOS/Android 真机场景,普通代理常被拒绝,这时可以使用 USB 直连抓包工具(例如 抓包大师 Sniffmaster)直接捕获设备流量、按 App 过滤并导出 PCAP,方便在 Wireshark 中进一步分析 TLS 握手与证书链问题。

七、mitmproxy 用于自动化调试(小示例)

# save as addon.py
from mitmproxy import httpdef response(flow: http.HTTPFlow):if "api.example.com" in flow.request.host:# 打印或修改响应,或记录原始 bodyprint(flow.response.status_code, len(flow.response.content))

运行:mitmproxy -s addon.py,并在请求中指定代理。适合在爬虫开发时做断点调试或自动注入。


八、合规与风险提示

抓取数据前务必确认目标网站的使用条款与法律合规;在生产环境或客户数据上进行抓包/存储时要做好脱敏与权限控制。对付验证码或绕过认证时尤须慎重,优先寻求授权测试环境或 API 合作。


构建稳定的 Python HTTPS 爬虫需要把请求实现、证书与 TLS 兼容、反爬策略与抓包调试这几部分当成工程化流程来做。日常建议是:用 requests/aiohttp 做主抓取,用 mitmproxy/Charles 做抓包调试;当遇到移动端/真机或 Pinning/mTLS 难题时,把 Sniffmaster 作为排查链路的一部分,结合 Wireshark 做握手级别分析。把重试、代理池、限速、日志与监控整合后,爬虫稳定性会显著提升。

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

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

相关文章

网站素材设计手机网站排名怎么做

介绍 最近在导入数据库数据, 有时候给的数据源文件,存在重复数据, 需要清除但是还需要保留一条记录的需求. 本文将介绍如何使用SQL Server来实现这个需求。 流程 下面是实现删除重复数据的流程,我们可以用表格展示每个步骤: 步骤 描述 步骤一 先…

电子商务物流网站建设规划方案wordpress主题 报纸

当谈到可视化工具时,有许多常用的工具可供选择。这些工具可以帮助我们将数据转化为易于理解和具有视觉吸引力的图表、图形和仪表板。 以下是10款常用的可视化工具,它们在不同领域和用途中广泛使用。 1. Datainside: Datainside是一款功能强…

网站服务商是什么无代码网站建设培训

作者 | Manish Gupta OneFlow编译 翻译|宛子琳、杨婷 AI驱动的技术正逐渐融入人们日常生活的各个角落,有望提高人们获取知识的能力,并提升整体生产效率。语言大模型(LLM)正是这些应用的核心。LLM对内存的需求很高&…

深入解析:基于开源AI大模型AI智能名片S2B2C商城小程序的产地优势产品营销策略研究

深入解析:基于开源AI大模型AI智能名片S2B2C商城小程序的产地优势产品营销策略研究pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; fon…

GreatSQL 优化技巧:最值子查询与窗口函数相互转换

GreatSQL 优化技巧:最值子查询与窗口函数相互转换 导语 近期 SQL 优化过程中遇到两个案例,一个是将最值子查询改写为窗口函数,另一个是将窗口函数改写为最值子查询,觉得很有意思,特此记录分享一下。 SQL案例 两个…

Windows Time 时间同步时出错

前言全局说明Windows Time 时间同步时出错一、说明 1.1 环境: Windows 7 旗舰版二、注册表相关参数位置 2.1 时间服务器列表 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers2.2 配置…

长沙市天心区建设局网站做购物网站需要学数据库吗

前言:在日常的开发工作当中可能需要实现一个二维码小功能,我参考了网上很多关于SpringBoot生成二维码的教程,最终还是自己封装了一套完整生成二维码的工具类,可以支持基础的黑白二维码、带颜色的二维码、带Logo的二维码、带颜色和…

网站建设设计费用手机怎么制作网站网址

gulp需要全局安装和当前目录都安装才能使用gulp命令 安装gulp插件 npm install gulp-rev gulp-rev-replace gulp-useref gulp-filter gulp-uglify gulp-csso --save-dev gulp-rev:给每个文件添加版本号,根据文件内容计算hash码,修改文件名&am…

可信网站服务周村网站制作价格低

【高并发】高并发环境下如何防止Tomcat内存溢出?看完我懂了!!发布时间:2020-04-19 00:47,浏览次数:126, 标签:Tomcat写在前面随着系统并发量越来越高,Tomcat所占用的内存就会越来越大&#xff0…

云主机如何做网站宜宾建设教育培训中心网站

YOLO v3可以说是单阶段检测器中的佼佼者,融合了多个框架的优势,在保持模型简洁性的同时,性能上也在当时达到了stoa。YOLO v3的主干网络是darknet-53的前面的52层,所以它是一个全卷积网络,并且为了降低池化带来的梯度负…

鸿蒙自定义弹出框响应式更新数据

鸿蒙自定义弹出框响应式更新数据1.原因: openCustomDialog不支持自定义组件使用@Reusable、@Link、@Provide、@Consume等装饰器,来同步弹出框弹出的页面与ComponentContent中自定义组件的状态 2.解决class Params { …

CCS开发环境和TMS320系列DSP实现IP-IQ谐波与无功电流检测

CCS开发环境和TMS320系列DSP实现IP-IQ谐波与无功电流检测一、系统架构设计 1. 硬件组成 +-------------------+| 三相电网 || (电压/电流互感器) |+--------+----------+|v +-------------------+ +---…

深入解析:Python数据分析:求矩阵的秩。啥是矩阵秩?听故事学线代并用Python实现,娘来太容易学会了!

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

多机动模型PHD滤波算法

一、算法框架与核心思想 多机动模型PHD(Probability Hypothesis Density)滤波结合了交互多模型(IMM)与概率假设密度滤波的优势,通过动态模型切换实现多机动目标跟踪。 关键特性:多模型交互:每个粒子携带模型索引…

Navicat17无限试用重置14天

若navicat 17安装后无法正常注册,则可以尝试以下方法。 把以下文本另存为.bat文件,每次执行,都会将试用剩余天数重置为14天,实现无限试用的目的。 本脚本主要以测试学习为目的用后请及时删除,如果需要请购买正版.…

基于Electron的Web打印解决方案:web-print-pdf技术分享

引言 在Web应用开发中,打印功能一直是一个令人头疼的问题。传统的Web打印方案存在样式丢失、兼容性差、功能单一等诸多痛点。最近偶然发现了一个名为web-print-pdf的npm包,在调查了几款常见的Web打印实现后,发现大多…

CF455D Serega and Fun

洛谷传送 看起来很能分块啊!然后一个分块吧唧一下拍上去就过了。 好的我们还是来看看平衡树做法。 我们考虑每次操作是什么。发现其实是把 \(a_r\) 的位置移到了 \(a_l\) 的前面,\(a_i\sim a_{r-1}\) 内的所有元素向…

实验任务1

实验任务1实验任务11 #include<stdio.h> 2 int main() 3 { 4 printf(" O \n"); 5 printf("<H>\n"); 6 printf("I I\n"); 7 return 0; 8 }View Code 截图task 21 #include&l…

实验任务

实验任务实验任务11 #include <stdio.h>2 int main()3 {4 printf(" O \n");5 printf("<H>\n");6 printf("I I\n");7 printf(" O \n");8 pri…

61.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--新增功能--提取金额 - 实践

61.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--新增功能--提取金额 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important…