如何用Python获取泛欧交易所全部到期日的期权链数据?
问题描述
我想要爬取泛欧交易所(Euronext)的期权链数据,以喜力(Heineken)为例,对应的网页地址为:https://live.euronext.com/en/product/index-options/HEI-DAMS。目前我仅能获取下一个到期日的期权链数据,使用的代码如下:
import requests url = 'https://live.euronext.com/en/ajax/getPricesOptionsAjax/stock-options/HEI/DAMS/' req = requests.get(url).json()
网页上选择“Select All”后可显示更多其他到期日的数据(例如2024年2月的期权数据默认不显示),但当前脚本无法获取这些数据。我尝试通过POST请求携带表单数据:
import requests url = 'https://live.euronext.com/en/ajax/getPricesOptionsAjax/stock-options/HEI/DAMS/' form_data = {"md[]": "04-2024", "ps": "11"} req = requests.post(url, data=form_data)
结果仍仅能获取1月的数据,请问如何调整代码以获取所有到期日的期权链数据?
解决方案
先获取所有可用到期月份
先通过GET请求拉取初始数据,其中maturities字段包含了平台提供的所有到期月份选项,无需手动枚举:import requests url = 'https://live.euronext.com/en/ajax/getPricesOptionsAjax/stock-options/HEI/DAMS/' # 发起GET请求提取所有到期月份 init_response = requests.get(url).json() available_maturities = [item['value'] for item in init_response['maturities']]发送POST请求获取全量期权数据
将所有到期月份以数组形式传入md[]参数,同时把ps(每页数据量)设为足够大的值(比如9999),跳过分页逻辑直接获取所有数据:# 构造表单参数 form_data = { "md[]": available_maturities, "ps": "9999" } # 添加浏览器请求头避免被服务器拦截 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36' } # 发送POST请求并解析结果 final_response = requests.post(url, data=form_data, headers=headers) all_options_data = final_response.json()关键参数说明
md[]:必须以数组形式传入所有目标到期月份,仅传单个月份只会返回对应到期日的数据ps:控制每页返回的数据条数,设置为超大值可一次性获取全量数据- 请求头:模拟浏览器请求标识,部分场景下可避免服务器拒绝非浏览器发起的请求
内容的提问来源于stack exchange,提问作者Victor Roos
相关产品推荐
相关产品推荐

