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

使用requests.get()爬取IAA共识价时数据缺失(Python 2)

解决动态内容爬取的问题

你遇到的核心问题是:这个页面的共识价格是通过JavaScript动态渲染的。requests库只能获取服务器返回的初始静态HTML,此时那个<h3 class="colorGreen">标签还没有被填充数据;而Chrome开发者工具看到的是浏览器执行完JS后的最终DOM结构,所以能看到62.00这个值。

解决方案:使用Selenium模拟浏览器加载

Selenium可以模拟真实浏览器的行为,等待页面JS执行完成后再提取数据,步骤如下:

  1. 先安装Selenium和对应浏览器的驱动:

    pip install selenium
    

    然后下载与你的Chrome版本匹配的ChromeDriver,将其放到系统PATH路径中,或者在代码里指定驱动文件路径。

  2. 修改你的代码,用Selenium替代requests:

    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
    
    def findPrice(Quote):
        link = f"https://www.settrade.com/AnalystConsensus/C04_10_stock_saa_p1.jsp?txtSymbol={Quote}&ssoPageId=9&selectPage=10"
        # 初始化Chrome浏览器(若驱动不在系统PATH,需添加executable_path参数指定路径)
        driver = webdriver.Chrome()
        driver.get(link)
        
        try:
            # 等待目标元素加载完成,最多等待10秒
            target_element = WebDriverWait(driver, 10).until(
                EC.presence_of_element_located((By.CSS_SELECTOR, "h3.colorGreen"))
            )
            consensus_price = target_element.text
            return consensus_price
        finally:
            # 无论成功失败都关闭浏览器
            driver.quit()
    
    print(findPrice('PTT'))
    

额外说明

  • 原代码里的几个小问题:
    • Python3中print是函数,需要加括号:print(page.content)
    • soup.findAll('h3')返回的是标签列表,不能直接调用.string;即使定位到带colorGreen类的h3(比如soup.find('h3', class_='colorGreen')),静态HTML里该标签依然是空的,所以必须用动态渲染工具。
  • 如果你不想用Selenium,也可以尝试Playwright,它同样能模拟浏览器行为,配置流程可能更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:46:08