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

如何用BeautifulSoup抓取雅虎财经新闻标题?爬取失败求排查

雅虎财经新闻抓取问题排查与解决

一、BeautifulSoup find()/find_all() 核心逻辑

  • find():遍历HTML文档树,返回第一个符合匹配规则(标签名、属性、文本等)的元素对象;找不到则返回None。
  • find_all():遍历整个文档树,返回所有符合规则的元素组成的列表;找不到则返回空列表[]。
    匹配时可指定标签名(如div)、属性(如class/id)、文本内容,甚至用自定义函数过滤元素。

二、你的代码问题出在哪?

  1. 选择器过时:你使用的Py(14px) Pos(r)类名,当前雅虎财经EURUSD页面的新闻区域已不再使用,自然无法匹配到元素。
  2. 动态加载限制:雅虎财经的新闻内容是通过JavaScript动态渲染的,直接用requests等工具获取的静态HTML源码里,根本没有新闻相关的DOM结构,即便选择器正确也抓不到内容。

三、解决方法

方法1:用Selenium获取动态渲染后的页面

Selenium可模拟浏览器加载页面,等待JS执行完成后再获取源码,确保拿到完整的新闻DOM。

示例代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup

# 初始化Chrome浏览器(需对应版本的chromedriver)
driver = webdriver.Chrome()
url = "https://finance.yahoo.com/quote/EURUSD%3DX?p=EURUSD%3DX"
driver.get(url)

# 等待新闻区域加载完成,最多等待10秒
wait = WebDriverWait(driver, 10)
wait.until(EC.presence_of_element_located((By.CLASS_NAME, "Ovx(a)")))

# 获取渲染后的页面源码
source_s = driver.page_source
driver.quit()

# 解析HTML并提取标题
html = BeautifulSoup(source_s, "html.parser")
news_items = html.find_all("li", class_="js-stream-content")

news_titles = []
for item in news_items:
    title_tag = item.find("a", class_="Fw(b)")
    if title_tag:
        news_titles.append(title_tag.get_text(strip=True))

print("新闻标题列表:", news_titles)

方法2:直接调用雅虎财经API(更高效)

雅虎财经提供公开API接口,无需解析HTML,直接请求就能拿到结构化新闻数据,避免页面结构变化的问题。示例(需requests库):

import requests

ticker = "EURUSD=X"
url = f"https://query1.finance.yahoo.com/v1/finance/search?q={ticker}&newsCount=10"

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)
data = response.json()

# 提取新闻标题
news_titles = [news["title"] for news in data["news"]]
print("新闻标题列表:", news_titles)

四、注意事项

  • 雅虎财经有反爬机制,请求时务必添加User-Agent头模拟浏览器请求;
  • 使用Selenium时,需保证chromedriver版本与浏览器版本匹配;
  • API接口可能随平台调整,若失效可查看页面网络请求,定位最新接口地址。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 09:31:00