You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

添加Chrome开发者工具获取的请求头后Python Requests仍返回403错误,请求访问指定Phosphosite URL的可行方案

解决Cloudflare拦截下Python访问目标站点的问题

遇到Cloudflare拦截导致403是很常见的情况——毕竟单纯复制Chrome的请求头远远不够,Cloudflare的反爬机制会检查更多维度的信息:比如JavaScript执行能力、浏览器指纹、动态生成的验证Cookie,甚至请求时序这些细节。

直接用Requests库可行吗?

理论上可以,但手动模拟Cloudflare的验证流程难度极高:你需要解析Cloudflare的挑战页面、执行其中的JavaScript生成验证参数、处理Cookie的动态更新,而且Cloudflare的验证规则会频繁升级,刚写好的逻辑可能很快就失效。所以不推荐直接用原生Requests硬刚,性价比太低。

可行的替代方案

这里给你两个实用的解决思路:

1. 使用专门的Cloudflare绕过库:cloudscraper

这个库是对Requests的封装,内部会自动模拟浏览器执行Cloudflare的验证逻辑,用法和Requests几乎一致,上手成本很低。

首先安装依赖:

pip install cloudscraper

然后修改你的代码:

from bs4 import BeautifulSoup
import cloudscraper

url = 'https://www.phosphosite.org/proteinAction.action?id=5848&showAllSites=true'
# 创建一个模拟浏览器的scraper实例
scraper = cloudscraper.create_scraper()
result = scraper.get(url)

print(result.status_code)
# 正常情况下应该返回200,接下来就可以用BeautifulSoup解析内容了
soup = BeautifulSoup(result.text, 'html.parser')

2. 使用真实浏览器模拟工具:Playwright/Selenium

如果cloudscraper失效(比如Cloudflare升级了防护),用真实浏览器模拟是最稳妥的方案——它完全模拟人类操作浏览器的行为,能绕过几乎所有基于JS的反爬验证。这里以Playwright为例(比Selenium更轻量、API更友好):

首先安装依赖和浏览器:

pip install playwright
playwright install chromium

然后编写代码:

from bs4 import BeautifulSoup
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    # 启动无头浏览器(headless=False可以打开可视化窗口查看过程)
    browser = p.chromium.launch(headless=True)
    page = browser.new_page()
    # 访问目标页面,Playwright会自动处理Cloudflare的验证
    page.goto(url)
    # 等待页面核心内容加载完成(这里可以根据页面实际元素调整等待条件)
    page.wait_for_selector('body')
    # 获取页面HTML
    html = page.content()
    browser.close()

# 解析页面内容
soup = BeautifulSoup(html, 'html.parser')

注意事项

  • 无论用哪种方法,都要严格遵守目标站点的robots.txt和使用条款,控制请求频率,避免给服务器造成不必要的压力。
  • Cloudflare的防护策略会动态调整,如果某一种方案失效,可以尝试切换另一种。

内容的提问来源于stack exchange,提问作者dkh32

火山引擎 最新活动