使用Python爬取斯图加特证交所债券表格返回空列表求助
问题原因及解决方案
原因分析
你用requests直接获取的是静态HTML页面,而目标网站的债券表格数据是通过JavaScript异步加载的,静态页面里根本没有表格元素,所以BeautifulSoup找不到对应节点,返回空列表。
解决方法
方案1:用Selenium模拟浏览器加载动态内容
这种方法模拟真实浏览器渲染页面,能拿到完整的加载后内容:
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 from bs4 import BeautifulSoup import time URL = 'https://www.boerse-stuttgart.de/en/tools/finder-tools/bonds/?dateIssue.min=2022-09-28&dateIssue.max=2022-09-28' # 初始化Chrome浏览器(需提前安装对应版本的chromedriver) driver = webdriver.Chrome() driver.get(URL) # 等待表格加载完成,最长等待10秒 try: WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CLASS_NAME, "bsg-table")) ) time.sleep(2) # 留缓冲时间确保数据加载完全 page_source = driver.page_source soup = BeautifulSoup(page_source, 'html.parser') table = soup.find(class_="bsg-table bsg-table--tablesaw tablesaw-swipe") print(table) finally: driver.quit()
方案2:直接请求数据接口(更高效)
打开浏览器F12进入开发者工具,在Network标签筛选XHR请求,能找到加载表格数据的API接口,直接请求接口拿JSON数据,无需解析HTML:
import requests api_url = "https://www.boerse-stuttgart.de/api/instruments/finder/bonds" params = { "dateIssue.min": "2022-09-28", "dateIssue.max": "2022-09-28", "limit": 20, "offset": 0 } 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", "Accept": "application/json" } response = requests.get(api_url, params=params, headers=headers) data = response.json() print(data)
注意事项
- 使用Selenium时,需保证浏览器驱动版本和浏览器版本一致,避免兼容性问题。
- 直接请求接口时,要模拟浏览器的请求头(比如
User-Agent),防止被网站拦截;接口参数可能会随网站更新变化,需定期验证。
内容的提问来源于stack exchange,提问作者Yogita Negi
相关产品推荐
相关产品推荐

