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

使用Beautiful Soup提取CNN新闻标题失败,求解决方案

解决CNN搜索页面标题爬取无输出问题

可能的问题原因

  • 请求头缺失:CNN服务器会拦截不带User-Agent的请求,导致返回的页面不包含完整内容。
  • 类选择器使用错误:container__headline __headline是两个独立的CSS类,直接作为字符串传入可能无法正确匹配。
  • 页面动态加载:标题内容由JavaScript异步渲染,requests只能获取静态HTML,无法拿到动态生成的内容。
  • 页面结构变更:CNN可能调整了页面布局,标题不再位于指定的div标签中,而是放在h3、h4等标签内。

解决方案代码

静态页面适配(带请求头+正确选择器)

import requests
from bs4 import BeautifulSoup

url = "https://www.cnn.com/search?q=new&from=0&size=10&page=1&sort=newest&types=all&section=politics"
# 添加模拟浏览器的请求头
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"
}

response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, "html.parser")

# 用CSS选择器匹配多类元素
target_headlines = soup.select("div.container__headline.__headline")
# 备选:查找常见的h3标题容器
backup_headlines = soup.select("h3.container__headline")

if target_headlines:
    print("抓取到目标标题:")
    for i, headline in enumerate(target_headlines, 1):
        print(f"{i}. {headline.get_text(strip=True)}")
elif backup_headlines:
    print("抓取到备选标题(h3标签):")
    for i, headline in enumerate(backup_headlines, 1):
        print(f"{i}. {headline.get_text(strip=True)}")
else:
    print("未找到标题,请检查页面最新结构或尝试动态加载方案")

动态页面适配(使用Selenium)

如果页面是JS动态渲染,requests无法获取内容,用Selenium模拟浏览器加载:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from bs4 import BeautifulSoup
import time

url = "https://www.cnn.com/search?q=new&from=0&size=10&page=1&sort=newest&types=all&section=politics"

# 初始化Chrome浏览器
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get(url)
time.sleep(3)  # 等待页面完全加载

# 获取渲染后的页面源码
page_source = driver.page_source
soup = BeautifulSoup(page_source, "html.parser")

# 查找标题元素
target_headlines = soup.select("div.container__headline.__headline")
backup_headlines = soup.select("h3.container__headline")

if target_headlines:
    print("抓取到目标标题:")
    for i, headline in enumerate(target_headlines, 1):
        print(f"{i}. {headline.get_text(strip=True)}")
elif backup_headlines:
    print("抓取到备选标题(h3标签):")
    for i, headline in enumerate(backup_headlines, 1):
        print(f"{i}. {headline.get_text(strip=True)}")
else:
    print("未找到标题,请检查页面元素结构")

driver.quit()

额外提示

  1. 检查页面结构:右键目标标题→检查元素,确认当前标题所在的标签和类名是否正确。
  2. 反爬应对:如果频繁请求被拦截,可以添加随机延迟、更换User-Agent。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 02:50:31