Мой парсер не забирает данные с сайта, не могу разобраться почему. Раньше все работало
Вот мой парсер. Его суть в том, что он парсит даты и цены стоимости актива указанного мой периода:
import json
import requests
url = 'https://investfunds.ru/etf/9705/'
date_from = '14.01.2021'
date_to = '02.04.2021'
payload = {
'action': 'chartData',
'data_key': 'close',
'date_from': date_from,
'date_to': date_to
}
r = requests.get(url, params=payload)
print(r.content)
Если раньше я получал какие-то хоть данные, то сейчас я получаю пустой список:
b'[]'
Не могу разобраться, что произошло и из-за чего все перестало работать.
Раньше на выходе получал:
b'{"name":"FinEx USA UCITS ETF (USD)","tooltip":{"valueDecimals":2,"xDateFormat":"%d.%m.%Y"},"data":[[1617224400000,5610],[1617310800000,5647],[1617570000000,5699]]}'
Ответы (1 шт):
Проведя небольшое исследование данного вопроса я пришел к выводу что на сайте реализовали защиту от доступа к данным. Прежде всего запросы с самого сайта получают в качестве ответа gif файлы размером 1x1 что само по себе подозрительно, но еще не достаточно для того чтобы подтвердить мои догадки.
Однако, изучив содержимое вставляемых тегов можно придти к выводу что информация передается именно таким образом. Ниже приведен cниппет для сравнения 2х изображений полученых при смене диапазона в графике катировок. Сами gif файлы при этом идентичны и внутри себя информации не содержат. Аттрибуты изображений включая событие клика (на пиксель! и записанное далеко не стандартным образом) так же не оставляют равнодушным. Но так как мое исследование было достаточно краким, не могу ничего утверждать на 100%. Получение изображений происходит именно в момент работы с графиком.
const a = '<img src="https://mc.yandex.ru/clmap/51681923?page-url=https%3A%2F%2Finvestfunds.ru%2Fetf%2F9705%2F&pointer-click=rn%3A80775702%3Ax%3A61905%3Ay%3A26809%3At%3A1973%3Ap%3A%C2%9018%C2%8AAA2A4A1A11AA%3AX%3A1112%3AY%3A1072&browser-info=gdpr%3A14%3Au%3A1623031693599940360%3Av%3A551%3Avf%3Alvg2sn1re60e0fel%3Arqnl%3A1%3Ati%3A0%3Ast%3A1623031891&force-urlencoded=1" alt="https://mc.yandex.ru/clmap/51681923?page-url=https%3A%2F%2Finvestfunds.ru%2Fetf%2F9705%2F&pointer-click=rn%3A80775702%3Ax%3A61905%3Ay%3A26809%3At%3A1973%3Ap%3A%C2%9018%C2%8AAA2A4A1A11AA%3AX%3A1112%3AY%3A1072&browser-info=gdpr%3A14%3Au%3A1623031693599940360%3Av%3A551%3Avf%3Alvg2sn1re60e0fel%3Arqnl%3A1%3Ati%3A0%3Ast%3A1623031891&force-urlencoded=1" class="transparent">'
const b = '<img src="https://mc.yandex.ru/clmap/51681923?page-url=https%3A%2F%2Finvestfunds.ru%2Fetf%2F9705%2F&pointer-click=rn%3A89440648%3Ax%3A20540%3Ay%3A40959%3At%3A1810%3Ap%3A%C2%9D1%C2%9018%C2%8AAA2A4A1A11AA%3AX%3A388%3AY%3A1080&browser-info=gdpr%3A14%3Au%3A1623031693599940360%3Av%3A551%3Avf%3Alvg2sn1re60e0fel%3Arqnl%3A1%3Ati%3A0%3Ast%3A1623031875&force-urlencoded=1" alt="https://mc.yandex.ru/clmap/51681923?page-url=https%3A%2F%2Finvestfunds.ru%2Fetf%2F9705%2F&pointer-click=rn%3A89440648%3Ax%3A20540%3Ay%3A40959%3At%3A1810%3Ap%3A%C2%9D1%C2%9018%C2%8AAA2A4A1A11AA%3AX%3A388%3AY%3A1080&browser-info=gdpr%3A14%3Au%3A1623031693599940360%3Av%3A551%3Avf%3Alvg2sn1re60e0fel%3Arqnl%3A1%3Ati%3A0%3Ast%3A1623031875&force-urlencoded=1" class="transparent">'
console.log(a === b)
что касается парсера:
import requests
url = "https://investfunds.ru/etf/697/"
payload='''payload = {
'action': 'chartData',
'data_key': 'close',
'date_from': '01.04.2021',
'date_to': '05.04.2021',
}'''
response = requests.request("GET", url, data=payload)
print(response.content.decode('utf-8'))
так возвращается страница, но я не уверен что там есть нужные данные, хотя бы потому что на ней есть:
Показано 0 из 0, уточните запрос
Более 1000 записей, уточните запрос