【问题标题】:Crawling data but the url doesn't change抓取数据但 url 没有改变
【发布时间】:2018-12-01 23:41:56
【问题描述】:

我想用python从这个网页抓取数据:

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

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

有人对我如何做到这一点有想法吗?

【问题讨论】:

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


    【解决方案1】:

    您尝试解析的网站是动态的,这意味着当您在浏览器中下载它时它会运行一些代码。在您的情况下,代码设置为在单击“获取 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"])
    

    【讨论】:

      【解决方案2】:

      要在 Google Chrome 中查看请求或响应 HTTP 标头,请执行以下步骤:

      • 在 Chrome 中,访问一个 URL,右键单击,选择 Inspect 以打开开发者工具。
      • 选择网络选项卡。
      • 重新加载页面,在左侧面板中选择任意一个 HTTP 请求,右侧面板会显示 HTTP 标头。

      Source

      在你的情况下,

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

      以下是截图:

      例子:

      【讨论】:

        猜你喜欢
        • 2019-12-31
        • 1970-01-01
        • 1970-01-01
        • 2022-06-14
        • 2017-08-16
        • 2018-07-27
        • 1970-01-01
        • 1970-01-01
        • 2019-07-01
        相关资源
        最近更新 更多