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

部署在Heroku的Python Telegram Bot无法连接WordReference

Heroku部署Python Telegram Bot爬取WordReference失败排查方案

看起来你遇到的核心问题是WordReference针对Heroku IP或免费代理做了访问限制,毕竟其他网站爬取正常,说明Heroku本身的网络配置没问题。下面是几个可行的排查和解决方向:

  • 模拟浏览器请求头,绕过基础反爬
    很多网站会通过检查User-Agent识别非浏览器请求,直接用requests默认的头很容易被拦截。给请求添加标准的浏览器UA试试:

    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
    }
    page = 'http://www.wordreference.com/sinonimos/{}'.format(word)
    r = requests.get(page, headers=headers)
    

    同时注意不要高频请求,给每个请求加个1-2秒的延迟,避免触发频率限制。

  • 替换稳定的代理服务
    免费代理的生命周期极短,而且大概率已经被WordReference加入黑名单。如果必须用代理,建议换成付费的代理池服务,或者使用Heroku官方的代理附加组件(比如Proximo),这类服务的IP池更大、更稳定,被屏蔽的概率低很多。

  • 检查WordReference的爬取规则
    先访问http://www.wordreference.com/robots.txt,确认/sinonimos/路径是否允许爬虫访问。如果该路径被禁止,你的爬取行为本身就违反了网站规则,被拦截是必然的,这种情况下建议改用官方API(如果有的话)或者寻找替代的同义词数据源。

  • 增强错误日志排查
    现在的日志只显示连接失败,建议添加更详细的日志记录,比如请求的状态码、响应内容片段,帮助判断是IP被封还是代理失效:

    import logging
    logging.basicConfig(level=logging.INFO)
    logger = logging.getLogger(__name__)
    
    try:
        r = requests.get(page, headers=headers)
        logger.info(f"Request to {page} returned status code: {r.status_code}")
        if r.status_code == 403:
            logger.warning("Received 403 Forbidden - likely blocked by anti-scraping")
        r.raise_for_status()
    except requests.exceptions.RequestException as e:
        logger.error(f"Error fetching {word}: {str(e)}")
    
  • 尝试HTTPS访问
    你当前用的是HTTP协议,试试换成HTTPS的URL:https://www.wordreference.com/sinonimos/{}, 有些网站会强制HTTPS,HTTP请求可能被拦截或重定向失败。

内容的提问来源于stack exchange,提问作者J.L.G

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:30:16