HTML特定标签与属性提取失效:股票代码抓取不符问题求助
问题原因
你遇到的核心问题是:requests只能获取服务器返回的初始静态HTML,而该网站的交易数据是通过JavaScript动态渲染加载的,初始HTML里并没有你在浏览器中看到的PYPL:US、ANET:US这些目标内容,所以BeautifulSoup提取的是页面中其他无关的静态内容(比如页面缓存或其他区域的旧数据),并非滚动加载的多页问题。
解决方案
方案1:用Selenium模拟浏览器渲染(直观易实现)
Selenium会模拟真实浏览器打开页面,等待JavaScript加载完所有内容后再提取数据,完全还原浏览器中的页面状态。
步骤:
- 安装依赖包:
pip install selenium webdriver-manager
- 示例代码:
from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager from bs4 import BeautifulSoup import time # 初始化Chrome浏览器 driver = webdriver.Chrome(service=Service(ChromeDriverManager().install())) target_url = "https://www.capitoltrades.com/trades?txType=buy&tradeSize=4&tradeSize=5&tradeSize=6&tradeSize=7&tradeSize=8&tradeSize=9&tradeSize=10&page=3" driver.get(target_url) # 等待页面完全加载(根据网络情况调整等待时长,比如3-5秒) time.sleep(3) # 获取加载完成后的页面源码 page_html = driver.page_source soup = BeautifulSoup(page_html, 'html.parser') # 提取目标股票代码 ticker_elements = soup.find_all("span", class_="q-field issuer-ticker") for elem in ticker_elements: print(elem.get_text().strip()) # 关闭浏览器 driver.quit()
方案2:直接调用网站API接口(高效稳定)
浏览器打开目标页面后按F12打开开发者工具,切换到「Network」标签,刷新页面后筛选「XHR/fetch」类型的请求,能找到网站实际用来加载数据的API接口(比如类似https://api.capitoltrades.com/v1/trades的地址),直接请求API可以绕过JS渲染,更快更稳定地获取数据。
示例代码(需根据实际API参数调整):
import requests api_url = "https://api.capitoltrades.com/v1/trades" # 构造请求参数,对应原URL的筛选条件 request_params = { "txType": "buy", "tradeSize": [4,5,6,7,8,9,10], "page": 3, "limit": 20 # 每页返回的数据条数,可根据实际情况修改 } # 添加请求头模拟浏览器,避免被反爬拦截 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" } response = requests.get(api_url, params=request_params, headers=headers) trade_data = response.json() # 提取股票代码 for trade in trade_data.get("data", []): ticker_symbol = trade.get("ticker") if ticker_symbol: print(f"{ticker_symbol}:US")
注意事项:
- API接口的地址和参数可能会随网站更新变化,需要自己通过开发者工具确认最新信息;
- 部分网站会有反爬机制,需控制请求频率,避免频繁请求导致IP被封禁。
内容的提问来源于stack exchange,提问作者Joey
相关产品推荐
相关产品推荐

