搜寻资料,但网址没有改变

时间:2018-06-22 13:19:12

标签: python-3.x web-scraping scrapy web-crawler

我想使用python从此网页抓取数据:

https://www.discountoptiondata.com/freedata/

通过对到期日期和符号保持相同的值,但对开始日期的所有值进行迭代。 问题在于,所有组合的URL都保持不变,因此我无法获取要爬网的URL列表。

有人知道我该怎么做吗?

2 个答案:

答案 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标头,请执行以下步骤:

  • 在Chrome中,访问URL,右键单击,选择“检查”以打开开发人员工具。
  • 选择“网络”标签。
  • 重新加载页面,在左侧面板上选择任何HTTP请求,HTTP标头将显示在右侧面板上。

Source

就您而言,

  • 在Google Chrome浏览器中打开https://www.discountoptiondata.com/freedata/
  • 右键单击,选择“检查”,然后选择“网络”选项卡
  • 现在,如果您选择开始日期,则会在“标题”标签下找到请求网址。
  • 以同样的方式可以在“响应”选项卡下查看响应。

以下是屏幕截图:

示例: