You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 18:09:23