如何提取浏览器加载时动态生成的随机Ticker Symbol?
抓取动态生成的股票代码解决方案
问题原因
你用requests搭配BeautifulSoup抓取页面时只能拿到“Loading...”,是因为这个随机股票代码是页面加载后通过JavaScript动态生成的。requests只会获取页面初始的静态HTML,不会执行页面里的JS脚本,所以没法拿到后续渲染出来的实际内容。
解决办法
要抓取动态渲染的内容,得用能模拟浏览器执行JS的工具,比如Selenium或者Playwright,下面分别给出示例:
方法一:使用Selenium
1. 安装依赖
先安装Selenium和对应浏览器驱动(以Chrome为例):
pip install selenium
注意:ChromeDriver版本要和你的Chrome浏览器版本匹配,下载后放到系统可访问路径(比如系统PATH),或者在代码里指定驱动路径。
2. 代码实现
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 main(url): # 初始化Chrome浏览器驱动 driver = webdriver.Chrome() driver.get(url) try: # 等待目标元素加载完成,最多等待10秒 ticker_element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "ticker")) ) # 获取元素文本,此时已经是动态生成的股票代码 ticker = ticker_element.text print(ticker) finally: # 无论成功失败,都关闭浏览器释放资源 driver.quit() if __name__ == "__main__": main("https://www.rayberger.org/random-stock-picker/")
方法二:使用Playwright(更简洁)
Playwright自带浏览器驱动,不用手动下载配置,上手更方便:
1. 安装依赖
pip install playwright playwright install chrome
2. 代码实现
from playwright.sync_api import sync_playwright def main(url): with sync_playwright() as p: # 启动Chrome浏览器 browser = p.chromium.launch() page = browser.new_page() page.goto(url) # 等待元素文本不再是"Loading..." page.wait_for_function('document.getElementById("ticker").textContent !== "Loading..."') # 获取股票代码 ticker = page.locator("#ticker").text_content() print(ticker) browser.close() if __name__ == "__main__": main("https://www.rayberger.org/random-stock-picker/")
内容的提问来源于stack exchange,提问作者Sprinkled Difficulty
相关产品推荐
相关产品推荐

