You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PythonAnywhere运行urllib代码报403 Forbidden错误排查咨询

问题诊断

你遇到的urllib.error.URLError: <urlopen error Tunnel connection failed: 403 Forbidden>和本地代码逻辑无关,核心触发原因有两个:

  • 本地运行时你的出口IP是普通民用IP,且零散请求触发反爬阈值高,哪怕裸调urlopen带默认的Python UA标识,也能正常拿到响应
  • PythonAnywhere免费/基础档账户的所有公网出站请求必须走平台统一代理隧道,这批IP段因为被大量用户用来跑爬虫,早就被绝大多数有基础反爬机制的站点标记为恶意来源;加上你直接调用urlopen时没有自定义请求头,请求的UA特征是完全暴露的Python-urllib/x.x,直接被目标站拦截返回403。
修复步骤

按优先级依次操作即可:

1. 必改:给请求加完整浏览器请求头

不要直接传url给urlopen,先构造带合法头的Request对象,替换原来第7行的逻辑:

from urllib.request import urlopen, Request

# 替换成你要爬取的目标地址
url = "target_url"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
    "Referer": url.split("/")[0] + "//" + url.split("/")[2]
}
req = Request(url, headers=headers)
html = urlopen(req, timeout=15).read()

如果目标站有特殊头校验,对应补全头字段即可,Referer字段默认填目标站首页地址适配性最好

2. 核对平台访问权限

  • 免费版账户不要自行在代码里配置第三方代理,平台强制要求出站走官方代理,额外加代理配置反而会触发网络规则拦截。
  • 先在PythonAnywhere的控制台里执行curl 你的目标url测试连通性,如果curl也返回403,说明目标站已经把平台对应套餐的IP段全量拉黑,这种情况改请求头没用,要么升级付费版(付费版使用独立IP段,被拦截概率低很多),要么更换爬取数据源。
  • 如果代码包含批量、循环爬取逻辑,每次请求之间加2-5秒的随机延时,PythonAnywhere会自动拦截高频异常请求,触发后也会返回403类错误。

3. 高拦截场景换请求库

urllib的请求特征固定,反爬严格的站点即使改了UA也能识别,直接换成requests库降低特征:
先在PythonAnywhere的对应虚拟环境执行安装命令:
pip install requests beautifulsoup4
然后替换请求逻辑:

import requests
from bs4 import BeautifulSoup
import random
import time

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
}
session = requests.Session()
resp = session.get(url, headers=headers, timeout=15)
resp.raise_for_status()
html = resp.text
# 后续BeautifulSoup解析、关键词匹配逻辑和原有代码完全一致
soup = BeautifulSoup(html, "html.parser")

部署提示:如果后续要把代码包装成Web服务,不要把爬取逻辑放在接口同步响应链路里,爬取超时、被拦截都会直接导致接口报500,建议加一层异步任务处理爬取逻辑。

避坑说明
  • 免费版PythonAnywhere不要尝试爬取头部互联网站点(电商、搜索引擎、主流内容社区),这类站点的反爬规则已经把免费版代理段全量拉黑,改请求头也无法绕过。
  • 不要修改PythonAnywhere的系统网络配置,改动后会直接导致Web服务无法正常启动。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 15:33:17