使用Python爬取指定网页表格数据失败,无报错仅返回表头,需不借助Selenium爬取全页数据
问题原因
你请求的目标URL是后端数据接口,返回内容为JSON格式的结构化数据,而非预渲染完成的完整HTML页面。页面内的表格行数据是前端拿到接口返回的JSON后,通过JS动态渲染生成的,静态请求返回的内容中仅包含表头的固定HTML结构,因此pd.read_html()只能解析到表头,无法获取实际业务数据。
实现代码(无需Selenium)
直接解析接口返回的JSON数据,同时加入分页逻辑即可爬取全量数据,代码如下:
import requests import pandas as pd headers = { "User-Agent": "Mozilla/5.0 (X11; CrOS x86_64 12871.102.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.141 Safari/537.36", "Accept": "application/json" } base_url = "https://www.nse-ebp.com/ebp/rest/placement" params = { "pub": "true", "page": 0, # 页码起始值可根据站点实际规则调整 "size": 100 # 每页条数可设置为站点允许的最大值,减少请求次数 } all_data = [] while True: resp = requests.get(base_url, headers=headers, params=params) resp.raise_for_status() json_data = resp.json() # 取当前页的表格数据,key可根据接口返回的实际结构调整 current_page_data = json_data.get("content", []) if not current_page_data: break all_data.extend(current_page_data) # 页码自增请求下一页 params["page"] += 1 # 合并为DataFrame df = pd.DataFrame(all_data) print(df) # 按需导出为csv:df.to_csv("nse_data.csv", index=False, encoding="utf-8-sig")
代码说明
- 直接请求原始数据接口,无需解析HTML,爬取效率远高于页面元素解析
- 自动循环处理分页,直到接口返回空数据后停止爬取
- 若接口返回的字段结构有调整,只需修改
json_data.get("content", [])中的key为实际存储数据的字段名即可
内容的提问来源于stack exchange,提问作者Tech Bro
相关产品推荐
相关产品推荐

