我想使用python从此网页抓取数据:
https://www.discountoptiondata.com/freedata/
通过对到期日期和符号保持相同的值,但对开始日期的所有值进行迭代。 问题在于,所有组合的URL都保持不变,因此我无法获取要爬网的URL列表。
有人知道我该怎么做吗?
答案 0 :(得分:1)
您要解析的网站是动态的,这意味着您在浏览器中下载该网站时会运行一些代码。对于您而言,将代码设置为在单击“获取OptionData”按钮时获取数据。
您实际上可以在浏览器“开发人员工具”的“网络”标签中看到浏览器获取数据。 F12 →网络→(刷新页面)→填写表格,然后单击“获取OptionData”。它将作为XHR请求显示在“网络”选项卡列表中。
数据获取的响应看起来像这样
{
"AskPrice": "5.7",
"AskSize": "",
"BidPrice": "0.85",
"ExpirationDate": "2019-06-21",
"LastPrice": "4.4",
"StrikePrice": "1000",
"Symbol": "SPX"
}
从数据提取返回的数据被编码为JSON,这对我们来说是幸运的,它很容易在Python中解析。您可以通过在“网络”标签中调查XHR请求来获取上述JSON代码,这是我的网址
https://www.discountoptiondata.com/freedata/getoptiondatajson?symbol=spx&datadate=2018-06-01&expirationDate=2018-06-15
我不熟悉scrapy,但是对于基于JSON的解析,我建议使用'requests'模块。这是一个示例程序,它将获取网页上显示的数据
import requests
ROOT_URL = "https://www.discountoptiondata.com/freedata/getoptiondatajson"
def fetch_option_data(symbol, datadate, expiration_date):
response = requests.get(ROOT_URL, params={"symbol": symbol, "datadate": datadate, "expirationDate": expiration_date})
return response.json()
data = fetch_option_data('spx', '2018-06-01', '2018-06-15')
for item in data:
print("AskPrice:", item['AskPrice'], "Last Price:", item["LastPrice"])
答案 1 :(得分:0)
要在Google Chrome浏览器中查看请求或响应HTTP标头,请执行以下步骤:
就您而言,
以下是屏幕截图:
示例: