本文目录导读:

爬虫访问受限通常是因为网站设置了反爬机制,解决方案可以从简单到复杂分为几个层级,建议按顺序尝试:
最基本的伪装(绕过初级反爬)
这是最容易被忽略但最有效的步骤:
- 设置合理的 User-Agent:不要用默认的
Python-urllib/3.x,伪装成常见浏览器。- 推荐:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36... - 进阶:准备一个 User-Agent 池,每次请求随机切换。
- 推荐:
- 添加 Referer 头:模拟从站内链接或搜索引擎点击过来。
- 添加 Cookie:部分网站需要先访问首页获得初始 Cookie,再访问目标页面。
- 控制请求频率:在每次请求之间加上
time.sleep(2)或随机延迟 1-5 秒,这是最温柔也是最有效的反屏蔽手段。
应对中级反爬(请求特征检测)
如果单纯伪装失效,网站可能检测了请求的连贯性或行为模式:
- 使用 IP 代理池:当单个 IP 请求过多被限制,轮换 IP 是最直接的办法。
- 免费方案:网上有很多免费代理列表(如快代理、西刺代理),但质量低、寿命短。
- 付费方案:购买动态住宅代理(如 芝麻、小象、熊猫代理),价格稍贵但稳定,适合高难度网站。
- 构建自建池:如果带宽够,可以购买云主机搭建 Squid 或 tinyproxy 代理池。
- 保持 Session 一致性:使用
requests.Session()或者其他框架的会话对象,自动维持 Cookie 和连接池。 - 随机化请求时间:不要固定 2 秒一次,而是
random.uniform(1.5, 3.5)秒一次。 - 模仿浏览器行为:发送完整的请求头(Accept、Accept-Encoding、Accept-Language、Upgrade-Insecure-Requests 等)。
应对高级反爬(浏览器指纹、JS 加密、验证码)
当网站使用更复杂的反爬技术时,需要更重的解决方案:
- 使用 Headless 浏览器(Selenium/Playwright/Puppeteer):这是目前最常用、最保险的方案,它像真人一样操作浏览器,自然通过了浏览器指纹检测。
- 注意:即使这样也要做好伪装(如设置
window.navigator.webdriver为 false,关闭自动化控制特征)。 - 性能:比普通 HTTP 请求慢得多,适合少量页面或需要点击、滚动的页面。
- 替代方案:Playwright 性能比 Selenium 好,推荐用于复杂网站。
- 注意:即使这样也要做好伪装(如设置
- 处理 JS 渲染和加密:如果网站数据是通过 Ajax 异步加载且参数经过签名(如
token、sign、hash),单纯渲染整个页面太笨重。- 逆向 JS:分析加密逻辑,用 Python 重写。
- 使用第三方工具:如
pywasm执行 WebAssembly,或使用js2py/execjs执行 JS 代码。 - 抓取接口:直接找到返回 JSON 数据的真实 API 接口(通常在 Chrome DevTools 的 Network 里,过滤 XHR/Fetch)。
- 验证码解决方案:
- 简单图文验证码:使用
ddddocr(一个开箱即用的免费OCR库)。 - 滑块/点选:使用第三方打码平台(如 超级鹰、YesCaptcha、2Captcha),按次收费。
- 极验/字体反爬:需要专门算法破解或绕过。
- 简单图文验证码:使用
终极建议:换个思路
既然爬不动,不如想想是不是可以不爬:
- 寻找官方 API:很多网站(GitHub、知乎、豆瓣)有公开或半公开的 API,在页面 Network 里过滤
.json、.js、.php(如果返回 JSON 格式),这是最高效、最合法的途径。 - 使用 RSS / 站点地图:有些网站提供新闻/博客的 RSS 源或
sitemap.xml。 - 协商数据合作:如果是商业用途,直接联系网站购买数据或申请 API 权限。
从轻到重的解决路径
- 先检查是不是自己的问题:User-Agent、Cookie、请求头、频率,70% 的问题出在这。
- 换 IP + 降低频率:加个代理池,慢一点爬。
- 用 Headless 浏览器模拟:Selenium/Playwright 解决 90% 的 JS 渲染问题。
- 逆向 JS 或打码:针对加密参数和验证码。
- 找官方 API:如果可能的话。
注意法律和道德边界:爬取公开数据通常没问题,但不要爬取非公开页面(需登录且非授权)、不要对服务器造成压力(如并发过高)、不要违反 robots.txt 的显式禁止(如 Disallow: /)——尤其是 Disallow: / 时,虽然技术上可以突破,但法律风险很高,建议先用 curl -v 或者浏览器开发者工具看看具体返回的状态码和错误信息,能更精确地判断问题类型。
标签: 请求伪装
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播