Я пытаюсь очистить Morningstar.com, чтобы получить финансовые данные и цены каждого фонда, доступные на сайте.К счастью, у меня нет проблем с очисткой финансовых данных (авуары, распределение активов, портфель, риск и т. Д.), Но когда нужно найти URL-адрес, на котором размещены ежедневные цены в формате JSON для каждого фонда, существует значение «dataid»который недоступен в коде HTML, и без него невозможно узнать точный URL, на котором размещены все цены.
Я пыталсяраспечатать всю страницу в виде текста для многих фондов, и ни один из них не показывает в коде HTML значение «dataid», которое мне нужно для получения цены.URL-адрес, на котором размещены цены, также включает в себя «secid», который очень легко поддается очистке, но не имеет никакого отношения к «dataid», который мне нужно очистить.
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"])
Приведенный выше код работает для ETF «AADR» только потому, что я вручную скопировал и вставил значение «dataid» в переменную «data_id», и без этой части информации невозможно получить доступежедневные цены.Я не хотел бы использовать Selenium в качестве альтернативы для поиска «dataid», потому что это очень медленный инструмент, и я намереваюсь собрать данные для более чем 28 000 средств, поэтому я попробовал только методы веб-очистки.Есть ли у вас какие-либо предложения о том, как получить доступ к инструменту проверки сети, который является единственным источником, который я нашел на данный момент, который показывает «dataid»?Заранее спасибо