使用BeautifulSoup无法获取CNN恐惧与贪婪指数数值的问题求助
解决CNN恐惧与贪婪指数爬虫无法获取数值的问题
问题核心是页面数值由JavaScript动态渲染填充:你用requests获取的是服务器返回的原始静态HTML,此时目标<span>标签还没有数值内容;而Chrome开发者工具展示的是浏览器执行完所有JS脚本后的最终DOM结构,所以能看到填充后的数值。
下面提供两种可行的解决方案:
方案1:直接请求数据API(推荐)
CNN的恐惧与贪婪指数数据是通过独立的API接口返回的,直接调用该接口无需处理页面渲染,效率更高:
import requests url = "https://production.dataviz.cnn.io/index/fearandgreed/graphdata" headers = { 'User-Agent': '你的个人User-Agent' } response = requests.get(url, headers=headers) data = response.json() # 提取当前指数数值及对应评级 current_score = data['fear_and_greed']['score'] current_rating = data['fear_and_greed']['rating'] print(f"恐惧与贪婪指数: {current_score} ({current_rating})")
方案2:用Selenium模拟浏览器加载页面
如果需要模拟完整的浏览器渲染流程,可以使用Selenium工具,它会自动执行页面JS并返回最终DOM:
- 先安装依赖:
pip install selenium
- 编写爬虫代码(需提前安装对应浏览器驱动,如ChromeDriver):
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 url = "https://edition.cnn.com/markets/fear-and-greed" user_agent = '你的个人User-Agent' # 配置Chrome浏览器选项,启用无头模式(不显示窗口) options = webdriver.ChromeOptions() options.add_argument('--headless=new') options.add_argument(f'user-agent={user_agent}') # 启动浏览器并访问页面 driver = webdriver.Chrome(options=options) driver.get(url) # 等待目标元素加载完成 wait = WebDriverWait(driver, 10) target_element = wait.until( EC.presence_of_element_located((By.CLASS_NAME, "market-fng-gauge__dial-number-value")) ) # 提取数值 fear_greed_value = target_element.text print(f"恐惧与贪婪指数: {fear_greed_value}") # 关闭浏览器 driver.quit()
两种方案对比:
- API方案:速度快、资源占用低,适合批量或定时爬取;
- Selenium方案:完全模拟浏览器行为,适配更复杂的动态页面,但需要额外安装驱动,速度较慢。
内容的提问来源于stack exchange,提问作者Daniel Gonzalez
相关产品推荐
相关产品推荐

