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

如何避免PythonAnywhere爬虫触发HTTP Error 418: You look like a robot错误?

解决PythonAnywhere部署爬虫时的418错误

你的推测完全站得住脚。PythonAnywhere的服务器IP是共享资源,大量用户用这些IP跑爬虫,目标网站很容易把这类IP归为“机器人”范畴,直接返回418错误——这是网站专门用来识别非人类访问的标志性状态码。当然也不排除你的请求头过于简单,没有模拟正常浏览器的请求特征,但IP被标记是最常见的诱因。

下面是几个有效的规避方案:

  • 补全请求头,模拟浏览器行为:默认的urllib请求头非常简陋,很容易被识别。至少要带上User-Agent,最好补充Accept、Accept-Language等字段,让请求看起来更像正常用户的访问。示例代码:
    from urllib.request import Request, urlopen
    
    target_url = "你要爬取的首页URL"
    # 复制真实浏览器的请求头,这里用Chrome的示例
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 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"
    }
    req = Request(target_url, headers=headers)
    try:
        response = urlopen(req)
        # 处理响应内容
    except Exception as e:
        print(f"请求出错: {e}")
    
  • 更换代理IP:既然PythonAnywhere的共享IP被拉黑,那就换个IP访问。可以选择免费代理(注意筛选稳定性),或者付费的代理服务,在urllib中配置代理的示例:
    from urllib.request import Request, ProxyHandler, build_opener
    
    proxy_info = {
        "http": "http://your-proxy-ip:port",
        "https": "https://your-proxy-ip:port"
    }
    proxy_handler = ProxyHandler(proxy_info)
    opener = build_opener(proxy_handler)
    
    target_url = "你要爬取的首页URL"
    req = Request(target_url, headers=headers)
    try:
        response = opener.open(req)
        # 处理响应内容
    except Exception as e:
        print(f"代理请求出错: {e}")
    
  • 控制请求节奏,添加随机延迟:短时间内高频请求是爬虫的典型特征,给请求之间加上随机延迟,模拟人类浏览的间隔。比如:
    import time
    import random
    
    # 每次请求后随机等待1-3秒
    time.sleep(random.uniform(1, 3))
    
  • 遵守网站爬虫协议:先访问目标网站的/robots.txt文件,确认网站是否允许爬虫访问你要爬取的内容,遵守规则能降低被拦截的概率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:08:29