使用requests.get()爬取IAA共识价时数据缺失(Python 2)
解决动态内容爬取的问题
你遇到的核心问题是:这个页面的共识价格是通过JavaScript动态渲染的。requests库只能获取服务器返回的初始静态HTML,此时那个<h3 class="colorGreen">标签还没有被填充数据;而Chrome开发者工具看到的是浏览器执行完JS后的最终DOM结构,所以能看到62.00这个值。
解决方案:使用Selenium模拟浏览器加载
Selenium可以模拟真实浏览器的行为,等待页面JS执行完成后再提取数据,步骤如下:
先安装Selenium和对应浏览器的驱动:
pip install selenium然后下载与你的Chrome版本匹配的ChromeDriver,将其放到系统PATH路径中,或者在代码里指定驱动文件路径。
修改你的代码,用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里该标签依然是空的,所以必须用动态渲染工具。
- Python3中
- 如果你不想用Selenium,也可以尝试Playwright,它同样能模拟浏览器行为,配置流程可能更简洁。
内容的提问来源于stack exchange,提问作者user3625025
相关产品推荐
相关产品推荐

