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

使用Python的lxml、requests爬取Google Finance股票数据XPath返回空问题

问题原因
  • 页面数据为JavaScript动态渲染:requests 只能获取初始静态HTML内容,你需要的股票价格数据是页面加载后通过异步接口请求、JS渲染生成的,初始HTML中不存在对应元素,因此xpath匹配结果为空。
  • 所用Xpath稳定性极低:你使用的是浏览器自动生成的全层级Xpath,其中yDmH0d属于Google页面动态生成的随机ID,不同访问场景下ID、页面层级都会发生变化,硬写该路径天然无法稳定匹配元素。
  • 未携带合法请求头:Google会拦截无有效User-Agent的请求,返回验证码页或错误页,你拿到的返回内容本身就不是正常的股票详情页,自然找不到目标元素。
解决方法

方案1:使用动态渲染工具爬取(推荐,适配性更高)

使用Selenium、Playwright等工具模拟真实浏览器运行,等待页面JS执行完成后再提取数据,同时使用更稳定的属性匹配规则,避免依赖动态ID和全层级路径。
示例代码(以Playwright为例):

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    page = browser.new_page(user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36")
    page.goto("https://www.google.com/finance/quote/HPQ:NYSE?comparison=NASDAQ%3AINTC%2CNASDAQ%3AAAPL%2CNASDAQ%3AAVGO%2CNASDAQ%3AQCOM")
    # 等待价格元素加载完成
    page.wait_for_selector("[data-last-price]", timeout=5000)
    # 提取所有对比股票的价格,对应data-last-price属性就是实时价格
    price_elements = page.locator("[data-last-price]").all()
    prices = [float(elem.get_attribute("data-last-price")) for elem in price_elements]
    print(prices)
    browser.close()

方案2:优化requests请求+解析静态预存数据

Google Finance的初始静态HTML中会将基础数据存在<script>标签内,你可以携带UA请求页面后,用正则匹配提取对应股票的价格数据,无需依赖动态渲染。

import requests
import re

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
url = "https://www.google.com/finance/quote/HPQ:NYSE?comparison=NASDAQ%3AINTC%2CNASDAQ%3AAAPL%2CNASDAQ%3AAVGO%2CNASDAQ%3AQCOM"
resp = requests.get(url, headers=headers)
# 匹配所有带data-last-price属性的元素值
price_pattern = re.compile(r'data-last-price="(\d+\.?\d*)"')
prices = price_pattern.findall(resp.text)
print([float(p) for p in prices])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:27:03