无法从Morningstar抓取dataid-如何从Python访问网络检查工具?

时间:2018-12-30 14:10:24

标签: python html web-scraping lxml morningstar

我正试图抓取Morningstar.com,以在网站上获得每种基金的财务数据和价格。幸运的是,我在抓取财务数据(资产,资产分配,投资组合,风险等)方面没有问题,但是当找到以JSON格式托管每个基金每日价格的URL时,就有一个“ dataid”值HTML代码中没有该功能,没有它,就无法知道承载所有价格的确切URL。

enter image description here

我已经尝试将整个页面打印为许多资金的文本,并且它们都没有在HTML代码中显示我为了获得价格而需要的“ dataid”值。托管价格的URL还包含“ secid”,可以很容易地对其进行抓取,但与我需要抓取的“ dataid”完全没有关系。

enter image description here

import requests
from lxml import html
import re
import json

quote_page = "https://www.morningstar.com/etfs/arcx/aadr/quote.html"
prices1 = "https://mschart.morningstar.com/chartweb/defaultChart?type=getcc&secids="
prices2 = "&dataid="
prices3 = "&startdate="
prices4 = "&enddate="
starting_date = "2018-01-01"
ending_date = "2018-12-28"

quote_html = requests.get(quote_page, timeout=10)
quote_tree = html.fromstring(quote_html.text)
security_id = re.findall('''meta name=['"]secId['"]\s*content=['"](.*?)['"]''', quote_html.text)[0]
security_type = re.findall('''meta name=['"]securityType['"]\s*content=['"](.*?)['"]''', quote_html.text)[0]

data_id = "8225"

daily_prices_url = prices1 + security_id + ";" + security_type + prices2 + data_id + prices3 + starting_date + prices4 + ending_date
daily_prices_html = requests.get(daily_prices_url, timeout=10)
json_prices = daily_prices_html.json()
for json_price in json_prices["data"]["r"]:
    j_prices = json_price["t"]
    for j_price in j_prices:
        daily_prices = j_price["d"]
        for daily_price in daily_prices:
            print(daily_price["i"] + " || " + daily_price["v"])

上面的代码仅对“ AADR” ETF有效,因为我手动将“ dataid”值复制并粘贴到“ data_id”变量中,并且如果没有这些信息,就无法访​​问每日价格。我不想使用Selenium作为查找“ dataid”的替代方法,因为它是一个非常慢的工具,并且我的目的是为超过28k的资金抓取数据,因此我仅尝试了机器人网络抓取方法。 您是否对如何访问网络检查工具有任何建议,这是我到目前为止发现的唯一显示“ dataid”的资源? 预先感谢

2 个答案:

答案 0 :(得分:1)

数据ID可能不那么重要。我更改了与ADR关联的代码F00000412E,同时保持数据ID不变。

我从这里获得了所有这些代码的列表:

https://www.firstrade.com/scripts/free_etfs/io.php

然后将选择的代码添加到您的网址中,例如

[
    "AIA",
    "iShares Asia 50 ETF",
    "FOUSA06MPQ"
  ]

使用FOUSA06MPQ

https://mschart.morningstar.com/chartweb/defaultChart?type=getcc&secids=FOUSA06MPQ;FE&dataid=8225&startdate=2017-01-01&enddate=2018-12-30

您可以通过将其他基金作为基准添加到图表中来验证值,例如XNAS:AIA

enter image description here

12月28日的价值为55.32。将此与检索到的JSON进行比较:

我用

重复了一次
[
    "ALD",
    "WisdomTree Asia Local Debt ETF",
    "F00000M8TW"
  ]

https://mschart.morningstar.com/chartweb/defaultChart?type=getcc&secids=F00000M8TW;FE&dataid=8225&startdate=2017-01-01&enddate=2018-12-30

答案 1 :(得分:0)

dataId 8217对我来说效果很好,与安全性无关。