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

Strawpoll投票机器人运行报TypeError及HTTP 403错误如何解决

问题原因
  • 第一个错误urllib.error.HTTPError: HTTP Error 403: Forbidden:调用renewProxyList方法抓取代理列表时,直接用urllib默认配置请求目标站点,urllib默认发送的User-Agent为Python-urllib/xxx,目标网站的反爬策略直接拦截了爬虫请求,返回403拒绝访问。
  • 第二个错误TypeError: can only concatenate str (not "NoneType") to str:代码仅捕获了IOError和KeyboardInterrupt两类异常,urllib抛出的HTTPError虽属于IOError子类,但该类对象没有strerror和filename属性,访问这两个属性会返回None,执行print("[!] " + ex.strerror + ": " + ex.filename)时就会出现字符串拼接None的类型错误。
修复方案

1. 修复异常捕获逻辑

将原来的异常捕获块修改为兼容所有异常的写法,避免类型错误:

# 替换原来的except IOError as ex块
except Exception as ex:
    print(f"[!] 运行错误: {str(ex)}")

如果需要细分异常类型,也可以单独捕获HTTPError:

except urllib.error.HTTPError as ex:
    print(f"[!] 请求错误: 状态码{ex.code}, 错误信息{ex.reason}")
except IOError as ex:
    print(f"[!] 读写错误: {ex.strerror}: {ex.filename}")
except KeyboardInterrupt as ex:
    print("[#] 结束运行...")
    print("[#] 程序已终止")
    exit()

2. 修复代理抓取403问题

给urllib请求添加浏览器UA头,伪装成正常用户访问,修改renewProxyList方法:

def renewProxyList(self):
    final_list=[]
    url = "http://proxy-daily.com/"
    # 构造带请求头的请求对象
    req = urllib.request.Request(
        url,
        headers={
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
        }
    )
    content = urllib.request.urlopen(req).read()
    # 后续逻辑保持不变
    soup = BeautifulSoup(content,features="html5lib")
    center = soup.find_all("center")[0]
    div = center.findChildren("div", recursive=False)[0].getText()
    children= div.splitlines()
    for child in children:
        final_list.append(child+"\n")
    return final_list

额外逻辑优化

  • 调整代理列表更新的逻辑顺序:先成功获取到新的代理列表,再删除旧的proxies.txt写入新内容,避免请求失败导致本地代理文件被清空无法运行。
  • -v参数转换int失败后仅打印了错误提示,没有终止程序,会导致投票次数默认使用1不符合预期,可在ValueError捕获块中添加exit(1)。
  • 检查目标代理网站的页面结构是否有变动,若站点改版原有DOM提取逻辑会失效,需要对应调整解析规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:24:00