如何抓取Kayak-Polo网站中动态生成的赛事表格数据?
抓取DataTables动态加载的赛事表格数据方案
针对你遇到的DataTables动态生成表格无法直接抓取的问题,按以下步骤操作即可获取数据:
抓包复刻请求参数
打开浏览器开发者工具(F12)的Network面板,筛选「XHR/fetch」类型,找到加载表格数据的POST请求(通常请求URL和页面URL一致)。复制以下内容:- 请求Headers:重点保留
Cookie、X-Requested-With、Referer、Content-Type这些字段,它们是网站验证请求合法性的关键 - Form Data参数:DataTables的服务器端请求会包含固定格式参数(如
draw、start、length),还有网站自定义的筛选参数(比如你页面里的lang=en、Saison=2022、Group=CM等),全部复制下来
- 请求Headers:重点保留
模拟POST请求获取数据
用Python的requests库构造请求,把刚才复制的Headers和Form Data填进去,示例代码如下:import requests url = "https://www.kayak-polo.info/kpmatchs.php" headers = { "Cookie": "你的Cookie内容", "X-Requested-With": "XMLHttpRequest", "Referer": "https://www.kayak-polo.info/kpmatchs.php?lang=en&event=0&Saison=2022&Group=CM&Compet=*&J=*&Round=*&Css=&navGroup=1", "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8" } data = { "draw": "1", "start": "0", "length": "10", "lang": "en", "event": "0", "Saison": "2022", "Group": "CM", # 补充其他复制的Form Data参数 } response = requests.post(url, headers=headers, data=data) table_data = response.json()["data"] # 表格行数据存放在data字段中处理分页获取全量数据
DataTables默认分页加载,返回的JSON里有recordsTotal字段表示总数据量。你可以循环调整start参数(比如每次累加length的值),直到start超过recordsTotal,就能拿到所有页的数据。注意每次请求的draw参数要递增(第一次是1,第二次是2,以此类推)。解析整理数据
返回的data数组里每个元素对应表格的一行,你可以根据页面表格的表头,把数组元素映射成结构化数据,最终导出成CSV或Excel文件。
内容的提问来源于stack exchange,提问作者Jesper van Beemdelust
相关产品推荐
相关产品推荐

