【发布时间】:2018-12-01 23:41:56
【问题描述】:
我想用python从这个网页抓取数据:
https://www.discountoptiondata.com/freedata/
通过保持到期日期和符号的相同值但迭代开始日期的所有值。 问题是所有组合的 URL 都保持不变,因此我无法获得要抓取的 URL 列表。
有人对我如何做到这一点有想法吗?
【问题讨论】:
标签: python-3.x web-scraping scrapy web-crawler
我想用python从这个网页抓取数据:
https://www.discountoptiondata.com/freedata/
通过保持到期日期和符号的相同值但迭代开始日期的所有值。 问题是所有组合的 URL 都保持不变,因此我无法获得要抓取的 URL 列表。
有人对我如何做到这一点有想法吗?
【问题讨论】:
标签: python-3.x web-scraping scrapy web-crawler
您尝试解析的网站是动态的,这意味着当您在浏览器中下载它时它会运行一些代码。在您的情况下,代码设置为在单击“获取 OptionData”按钮时获取数据。
您实际上可以在浏览器开发工具的“网络”选项卡中看到浏览器获取数据。 F12 → 网络 → (刷新页面) → 填写表格并点击“获取 OptionData”。它将在 Network Tab 列表中显示为 XHR 请求。
数据获取的响应看起来有点像这样
{
"AskPrice": "5.7",
"AskSize": "",
"BidPrice": "0.85",
"ExpirationDate": "2019-06-21",
"LastPrice": "4.4",
"StrikePrice": "1000",
"Symbol": "SPX"
}
从数据获取返回的数据被编码为 JSON,幸运的是,它很容易在 Python 中解析。您可以通过调查“网络”选项卡中的 XHR 请求来获取上述 JSON 代码,这是我的 URL
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"])
【讨论】:
要在 Google Chrome 中查看请求或响应 HTTP 标头,请执行以下步骤:
在你的情况下,
以下是截图:
例子:
【讨论】: