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

用Python+Beautiful Soup爬取BBC标题失败(返回None)如何解决?

问题分析与解决方案

你遇到的核心问题是requests获取的HTML内容和浏览器中实际渲染的不一致,导致Beautiful Soup找不到目标元素,主要有两个常见原因及对应解决方法:

1. 请求头缺失,被BBC识别为爬虫

BBC会校验请求的User-Agent等标识,默认的requests请求头会被判定为非浏览器请求,返回的是简化版或反爬页面,不含目标元素。

解决方法:添加模拟浏览器的请求头
修改代码,在请求时带上浏览器的标准请求头(可根据自己的浏览器版本调整):

import requests
from bs4 import BeautifulSoup

url = 'https://www.bbc.com/news/world-africa-68504329'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:115.0) Gecko/20100101 Firefox/115.0',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
    'Accept-Language': 'en-US,en;q=0.5'
}

response = requests.get(url, headers=headers)
response.encoding = 'utf-8'
html = response.text

soup = BeautifulSoup(html, 'html.parser')
# 找到标题容器后,提取内部的h1文本
head_container = soup.find(attrs={'data-component': 'headline-block'})
if head_container:
    headline = head_container.find('h1').get_text(strip=True)
    print(headline)
else:
    print("未找到目标标题容器")

2. 页面内容由JavaScript动态渲染

如果添加请求头后仍无法找到元素,说明目标内容是页面加载后通过JS动态生成的,requests只能获取初始HTML,无法抓取JS渲染后的内容。

解决方法:使用自动化工具加载JS渲染页面
用Selenium或Playwright这类工具模拟浏览器加载页面,获取完整的渲染后HTML:

以Selenium+Firefox无头模式为例:

from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from bs4 import BeautifulSoup

url = 'https://www.bbc.com/news/world-africa-68504329'
# 配置无头模式(不显示浏览器窗口)
options = Options()
options.add_argument('--headless=new')

driver = webdriver.Firefox(options=options)
driver.get(url)
# 可根据实际情况添加显式等待,确保页面完全加载
html = driver.page_source
driver.quit()

soup = BeautifulSoup(html, 'html.parser')
head_container = soup.find(attrs={'data-component': 'headline-block'})
if head_container:
    headline = head_container.find('h1').get_text(strip=True)
    print(headline)

额外提示

  • BBC的页面结构和反爬机制可能随时调整,需要定期检查目标元素的属性和位置
  • 爬取前请遵守BBC的robots.txt及网站使用条款,避免过度请求导致IP被封禁

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 21:37:37