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

爬取网站遇403 Forbidden错误,更换User-Agent仍未解决,求方案

解决爬虫遭遇403 Forbidden的实用排查方案

这种情况我太有共鸣了——明明浏览器能正常打开目标页面,复制了完全一致的User-Agent,试了Session、直接请求各种方式还是被拦,大概率是网站的反爬机制校验了更多细节,绝不止看UA这么简单。给你几个具体的排查和解决方向:

  • 补全完整的请求头字段
    浏览器发送请求时,除了User-Agent,还会携带一堆关键头部信息(比如AcceptAccept-LanguageRefererCookieAccept-Encoding),很多网站会校验这些字段的完整性。你可以打开Chrome的Network面板,找到浏览器访问该页面的请求,右键选择「复制为cURL(bash)」,再把cURL转换成requests格式的请求头,把所有字段都补全后再试。

  • 模拟完整的会话流程
    有些网站会验证你是否是从正常页面跳转而来,或者需要先获取首页的会话Cookie才能访问目标页面。你可以试试先用Session访问网站首页,再请求目标URL:

    import requests
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36",
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
        "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
        "Referer": "https://目标网站的首页URL/"
    }
    session = requests.Session()
    # 先访问首页获取会话Cookie
    session.get("https://目标网站的首页URL/", headers=headers)
    # 再请求目标URL
    req = session.get(URL, headers=headers)
    print(req.status_code)
    
  • 排查浏览器指纹校验
    如果上面的方法都无效,可能网站用了更复杂的反爬手段,比如Canvas指纹、WebGL指纹,或者检测你是否使用真实浏览器。这时候可以试试用Selenium或Playwright模拟真实浏览器环境,它们会完整复现浏览器的行为(包括JS执行、指纹生成),大概率能绕过这类校验。

  • 检查IP是否被封禁
    如果你之前频繁请求过该网站,你的IP可能已经被拉黑。可以试试切换网络(比如用手机热点),或者使用代理IP来请求,看是否能解决问题。

  • 控制请求频率
    网站可能会根据请求频率判断是否为爬虫,你可以在请求之间加上随机延迟,比如time.sleep(random.uniform(1,3)),模拟人类的访问节奏。

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

火山引擎 最新活动