如何在ArcGIS Online的Jupyter Notebook中用Python抓取JS按钮内的CSV表格?
解决动态生成CSV导入ArcGIS Online Jupyter Notebook的问题
核心思路
这个「Export (CSV)」按钮是通过JavaScript发起动态请求生成CSV文件,没有直接可访问的静态CSV URL,所以不能直接用pandas.read_csv读取。需要先找到按钮触发的实际接口地址,再通过请求库获取内容后导入pandas。
步骤1:抓取实际CSV接口
- 打开目标网站https://ciffc.net/national,按下F12打开浏览器开发者工具
- 切换到Network标签,筛选类型为XHR/Fetch
- 点击红色的「Export (CSV)」按钮,找到新出现的请求,查看其Request URL(这就是生成CSV的实际接口地址)
- 记录请求的方法(GET/POST)和必要的请求头(比如Referer、User-Agent)
步骤2:在ArcGIS Online Jupyter Notebook中编写代码
import pandas as pd import requests # 替换为你抓包得到的实际CSV接口URL csv_api_url = "https://ciffc.net/api/national/export" # 模拟浏览器请求头,避免被网站拦截 request_headers = { "Referer": "https://ciffc.net/national", "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" } # 发起请求并处理响应 try: response = requests.get(csv_api_url, headers=request_headers) response.raise_for_status() # 请求失败时抛出异常 except requests.exceptions.RequestException as e: print(f"请求出错: {e}") else: # 将响应文本转为pandas可读取的IO对象 csv_content = pd.io.common.StringIO(response.text) df = pd.read_csv(csv_content) # 验证数据导入结果 print("数据导入成功,前5行预览:") print(df.head())
注意事项
- 如果遇到403 Forbidden错误,检查抓包得到的请求头,把Cookie也加入
request_headers中(从开发者工具的Request Headers里复制完整Cookie内容) - 若后续CSV内容异常,重新抓包确认接口地址和参数是否有变化
内容的提问来源于stack exchange,提问作者gecco15
相关产品推荐
相关产品推荐

