如何扩展BeautifulSoup代码获取Investing.com股票全量概览数据
解决Investing.com英伟达股票指标重复获取问题
问题根源
你循环里用soup.find('span', ...)会从整个HTML文档中匹配第一个符合条件的元素,所以每次输出的都是第一个指标(Prev. Close)的数值。正确做法是在当前遍历的element范围内查找对应数值。
修正后的代码
from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By from bs4 import BeautifulSoup import pandas as pd # 初始化浏览器,替换为你的ChromeDriver路径 driver = webdriver.Chrome("你的ChromeDriver路径") driver.get("https://www.investing.com/equities/nvidia-corp") # 等待关键元素加载完成,避免动态加载导致获取不到数据 WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CLASS_NAME, "key-info_dd-numeric__2cYjc")) ) content = driver.page_source soup = BeautifulSoup(content, features="html.parser") # 存储指标数据的字典 nvidia_data = {} # 遍历每个指标容器 for element in soup.find_all('div', attrs={'class': 'flex justify-between border-b py-2 desktop:py-0.5'}): # 在当前element内查找指标名称和数值 label = element.find('span', class_='key-info_dd-label__3n5GT').text.strip() value = element.find('span', class_='key-info_dd-numeric__2cYjc').text.strip() nvidia_data[label] = value # 打印所有指标 for key, val in nvidia_data.items(): print(f"{key}: {val}") # 转成DataFrame方便后续处理 df = pd.DataFrame(nvidia_data.items(), columns=['指标', '数值']) print(df) driver.quit()
代码说明
- 等待加载:加入
WebDriverWait确保页面动态加载完成,避免因元素未渲染导致的空值问题 - 范围查找:用
element.find()替代soup.find(),限定在当前遍历的指标容器内查找数据 - 数据存储:用字典存储指标名称和对应数值,方便后续整理成表格或其他格式
额外提示
如果部分指标(比如Revenue)不在当前容器里,可以检查对应的HTML结构,调整find_all的目标元素类名,重复上述逻辑即可获取。
内容的提问来源于stack exchange,提问作者Luc
相关产品推荐
相关产品推荐

