Xpath无法获取值:Python爬取股票列表返回空列表求助
问题原因
目标网站的股票列表表格是动态加载的——初始请求返回的静态HTML里,表格的<tbody>是空的,实际数据是页面加载完成后通过AJAX请求获取并渲染的,所以直接用requests.get拿页面内容,再用XPath解析自然找不到元素。
解决方案
方法1:直接请求数据接口(推荐)
通过浏览器开发者工具抓包,可以找到加载表格数据的AJAX接口,直接请求这个接口获取JSON格式的数据,不用解析HTML。
代码示例
import requests headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36', 'X-Requested-With': 'XMLHttpRequest' } # 接口地址 url = 'https://chartink.com/screener/process' # 表单数据,对应"Stock closed near high"这个筛选条件的参数 payload = { 'scan_clause': '( {cash} ( latest close >= 0.98 * latest high ) and ( latest close >= latest open ) and ( latest volume > 100000 ) )' } resp = requests.post(url, headers=headers, data=payload) data = resp.json() # 提取股票名称(对应原表格第3列的内容) stock_list = [item['nsecode'] for item in data['data']] print(stock_list)
方法2:用Selenium模拟浏览器加载页面
如果不想抓包找接口,可以用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 driver = webdriver.Chrome() driver.get('https://chartink.com/screener/stock-closed-near-high') # 等待表格加载完成,最多等10秒 wait = WebDriverWait(driver, 10) table_rows = wait.until(EC.presence_of_all_elements_located((By.XPATH, '//*[@id="DataTables_Table_0"]/tbody/tr'))) # 提取第3列的股票名称 stock_list = [] for row in table_rows: stock_name = row.find_element(By.XPATH, './td[3]').text stock_list.append(stock_name) print(stock_list) driver.quit()
注意事项
- 方法1中,
scan_clause的参数需要和目标筛选条件匹配,如果你换了其他筛选器,要重新抓包获取对应的参数。 - 两种方法都建议添加
User-Agent请求头,避免被网站识别为爬虫而拦截。
内容的提问来源于stack exchange,提问作者Shivanshu Vashishtha
相关产品推荐
相关产品推荐

