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

fetch_website_content函数获取BBC体育文章内容返回空的原因排查

问题排查与修复建议

针对你调用fetch_website_content函数返回空内容的问题,以下是具体原因分析和解决办法:

可能的原因

  • 反爬机制拦截请求:BBC网站会识别非浏览器发起的请求,默认requests.get的User-Agent为python-requests/x.x.x,会被判定为爬虫,返回空页面或无有效内容的响应。
  • 内置解析器能力不足:Python内置的html.parser解析复杂的BBC页面结构时,可能出现解析不完整、丢失核心内容的情况。
  • 静态请求无法获取动态内容:如果目标文章的主内容是通过JavaScript动态渲染加载的,requests只能获取初始静态HTML,无法拿到动态生成的文本(不过BBC体育文章大多为静态渲染,此情况概率较低)。
  • URL格式错误:你提供的目标URL缺少http://或https://协议头,直接调用会触发请求异常;若你实际调用时已补充协议头,此条可忽略。

修复后的示例代码

import requests
from bs4 import BeautifulSoup

def fetch_website_content(url):
    try:
        # 添加模拟浏览器的请求头,绕过基础反爬
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
        }
        response = requests.get(url, headers=headers, timeout=10) 
        response.raise_for_status()
        
        # 使用更强大的lxml解析器(需提前安装:pip install lxml)
        soup = BeautifulSoup(response.text, 'lxml')
        
        # 定位BBC文章的主内容容器,精准提取核心文本(避免无关内容)
        main_content = soup.find('div', class_='ssrcss-11r1m41-RichTextWrapper e5tfeyi1')
        if main_content:
            text_content = main_content.get_text(separator='\n\n').strip()
            return text_content
        else:
            # 找不到主容器时返回全部文本作为备选
            return soup.get_text(separator='\n\n').strip()
    
    except requests.exceptions.RequestException as e:
        print(f"Error fetching {url}: {str(e)}")
        return None

额外说明

  • 安装lxml解析器:执行pip install lxml即可完成安装。
  • 主内容容器的class可能随BBC页面更新变化,若后续失效,可通过浏览器开发者工具重新查看文章主内容的HTML标签和类名,调整定位逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 01:41:04