ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Python 网络爬虫入门到实战 第 04 章:请求头、UA 伪装、超时、异常处理、基础反爬绕过

Python 网络爬虫入门到实战 第 04 章:请求头、UA 伪装、超时、异常处理、基础反爬绕过 专栏Python 网络爬虫入门到实战零基础连载全套 本章定位爬虫入门防踩坑核心章节。很多新手写好 requests 代码直接访问网站就 403 被拦截根源就是缺少请求头伪装、没有超时与异常捕获。本章聚焦基础反爬手段学会模拟真实浏览器行为写出健壮、稳定的爬虫请求代码为后面网页解析实战打下基础。✅ 学习目标理解 HTTP 请求头的作用掌握请求头常用字段含义掌握 User-AgentUA原理学会浏览器提取 UA 并伪装请求学会 timeout 超时参数配置防止爬虫长时间卡死熟练使用 try-except 捕获 requests 各类网络异常学习 Cookie、Referer 等其他请求头辅助绕过简单反爬理解基础反爬检测逻辑分清哪些是简易反爬、哪些是高强度反爬无法简单绕过一、为什么会被网站拦截直接使用requests.get(url)不带任何请求头去访问网页发送的请求头 UA 默认是python-requests/版本号。 网站服务器收到请求识别到客户端是 Python 爬虫程序直接返回 403 Forbidden 拒绝访问。反爬本质服务器校验请求的身份、行为判断是不是真实人类浏览器访问。 基础反爬校验请求头UA、Referer、Cookie本章全部可以处理。 进阶反爬验证码、JS 加密、IP 封禁、指纹校验本章不涉及后续章节讲解。二、请求头 headers 详解请求头是字典格式key 是字段名value 是对应参数模拟浏览器发给服务器的附加信息。headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36, Referer: https://www.baidu.com/, Accept-Language: zh-CN,zh;q0.9, Accept: text/html,application/xhtmlxml,application/xml;q0.9,image/webp,*/*;q0.8 }常用请求头字段说明字段作用User-Agent(UA)客户端身份标识告诉服务器当前是什么浏览器、操作系统最核心Accept告诉服务器客户端能接收哪些类型的数据html、图片、jsonAccept-Language浏览器支持的语言模拟中文用户访问Referer来源页面告诉服务器你是从哪个页面跳转过来的部分网站校验防盗链Cookie网站会话凭证登录态、身份标记部分网站必须携带不是所有网站都需要全部字段新手优先配置 UA遇到防盗链再加 Referer。如何获取真实浏览器 UAChrome 浏览器打开任意网页按 F12 打开开发者工具切换到 Network网络面板刷新页面随便选中任意一条请求右侧 Request Headers 里面找到User-Agent直接复制。三、UA 伪装实战代码import requests url https://httpbin.org/headers # 构造请求头 headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 } resp requests.get(url, headersheaders) print(resp.text)运行代码httpbin 会回显我们发送的请求头可以看到 UA 已经变成 Chrome 浏览器标识不再是 python-requests。四、timeout 超时参数防止爬虫卡死网络不稳定、服务器响应缓慢时requests 请求会一直等待程序卡死不动。timeout单位秒。超过设定时间服务器没有返回响应直接抛出超时异常终止本次请求。# 5秒超时5秒内无响应直接报错 resp requests.get(url, headersheaders, timeout5)注意timeout 不是服务器必须在 5 秒返回完整数据是连接 接收数据的总等待时间。五、requests 异常分类与 try-except 捕获爬虫网络请求会遇到大量异常断网、超时、域名不存在、404、403 等。 如果不捕获异常程序直接崩溃终止。requests 内置多种请求异常统一捕获或者细分捕获都可以。异常类型场景requests.exceptions.Timeout请求超时requests.exceptions.ConnectionError网络连接失败域名错误、断网requests.exceptions.HTTPErrorHTTP 状态码错误404/403/500requests.exceptions.RequestException所有 requests 请求异常的父类兜底捕获完整带异常捕获示例代码import requests url https://httpbin.org/headers headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 } try: resp requests.get(url, headersheaders, timeout5) # 状态码非200时主动抛出HTTPError异常 resp.raise_for_status() print(请求成功状态码, resp.status_code) print(resp.text) except requests.exceptions.Timeout: print(请求超时) except requests.exceptions.ConnectionError: print(网络连接失败请检查网址或网络) except requests.exceptions.HTTPError as e: print(HTTP请求错误, e) except requests.exceptions.RequestException as e: print(其他请求异常, e)六、进阶携带 Referer、Cookie 实现简单绕过部分网站开启防盗链校验必须携带 Referer 来源头否则直接返回空白页面或者 403。import requests url https://httpbin.org/headers headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36, Referer: https://httpbin.org/, Cookie: xxxxxxx } resp requests.get(url, headersheaders, timeout5) print(resp.text)Cookie 获取方式F12 开发者工具Request Headers 中的 Cookie 字段直接复制。Cookie 常用于需要登录才能访问的页面。七、基础反爬绕过小结与边界提醒✅ 本章方法可以解决只校验 UA 的简单网站拦截防盗链校验Referer需要携带 Cookie 访问的页面❌ 本章方法无法解决JS 动态渲染页面需要 Selenium/Playwright图形验证码、滑块验证码短时间高频访问触发 IP 封禁浏览器指纹校验、加密请求参数爬虫伦理提醒控制请求频率不要高频大量请求网站遵守网站 robots 协议。八、课后实战习题打开 Chrome 浏览器复制自己浏览器的 UA写爬虫代码携带 UA 访问httpbin.org/headers验证请求头生效。去掉 UA 再次访问观察请求头变化。给代码增加 timeout 超时参数设置为 3 秒。完善 try-except 异常捕获区分超时、连接错误、HTTP 错误三类异常并打印提示。拓展练习增加 Referer 和 Cookie 字段观察 httpbin 返回的请求头信息。九、本章小结User-Agent 是服务器识别爬虫最常用的标识伪装 UA 是爬虫第一道基础操作。headers 字典可以携带 UA、Referer、Cookie 等浏览器请求信息模拟真实访问行为。timeout 超时参数必须加上防止网络卡顿造成程序卡死。使用 try-except 捕获 requests 各类网络异常resp.raise_for_status()主动抛出非 200 状态码异常。基础请求头伪装只能应对简单反爬高强度反爬需要其他方案。
返回列表