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

使用Python爬虫访问songfacts.com时出现连接拒绝(超重试上限)求助

解决Songfacts爬取时的连接阻断问题

这是典型的反爬拦截问题啊——网站能识别出你的请求是脚本发出的,而非真实浏览器,所以在你尝试解析页面内容时触发了阻断(其实大概率是后续请求被拦,只是刚好在加了BeautifulSoup之后显现出来)。下面给你几个可行的解决方案:

  • 添加完整请求头伪装浏览器
    网站通常会检查User-Agent、Accept等请求头字段,补全这些字段能让你的请求更像真实用户的浏览器行为:

    import requests
    from bs4 import BeautifulSoup
    
    # 模拟Chrome浏览器的请求头
    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',
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
        'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3'
    }
    
    url = getSongUrlFor(title)
    page = requests.get(url, headers=headers).text
    soup = BeautifulSoup(page, 'html.parser')
    # 先验证基本解析是否正常,再提取全文本
    print(soup.title.string)
    content = soup.get_text()
    

    这里建议先不要急着调用get_text(),先打印页面标题这类简单内容,确认解析正常后再提取全文本。

  • 添加请求延迟避免频率触发拦截
    有些网站会限制请求频率,你可以在请求之间添加短暂休眠,降低被判定为爬虫的概率:

    import time
    
    # 在请求前或请求后添加1秒左右的延迟
    time.sleep(1)
    page = requests.get(url, headers=headers).text
    
  • 使用会话维持Cookie状态
    部分网站会通过Cookie验证会话合法性,用requests.Session()可以自动维持会话,处理Cookie:

    session = requests.Session()
    session.headers.update(headers)
    # 先访问一次首页建立会话,再请求目标页面
    session.get('https://www.songfacts.com')
    page = session.get(url).text
    soup = BeautifulSoup(page, 'html.parser')
    

你提到仅运行前两行正常,大概率是网站对首次请求放行,但后续请求(哪怕是同一个URL)因为缺少请求头被拦截——核心就是要让你的脚本尽可能模拟真实用户的浏览行为,减少被识别为爬虫的可能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:23:56