Существует этот веб-сайт: https://www.lyxoretf.co.uk/en/instit/products/search, и я пытаюсь сформировать правильный Python запрос POST, чтобы иметь возможность загрузить файл Excel и сохранить его локально.
Вы можете загрузить файл, щелкнув значок справа от раскрывающегося списка строк в верхней части таблицы. Записывая сетевую активность (и копируя запрос cURL), я обнаружил, что заголовки, которые мне нужно установить, а также данные формы (чтобы получить все столбцы в таблице):
HEADERS = {
'Connection': 'keep-alive',
'Pragma': 'no-cache',
'Cache-Control': 'no-cache',
'Origin': 'https://www.lyxoretf.co.uk',
'Upgrade-Insecure-Requests': '1',
'Content-Type': 'application/x-www-form-urlencoded',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36',
'Sec-Fetch-User': '?1',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'Sec-Fetch-Site': 'same-origin',
'Sec-Fetch-Mode': 'navigate',
'Referer': 'https://www.lyxoretf.co.uk/en/instit/products/search',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'en-GB,en-US;q=0.9,en;q=0.8',
}
FORM_DATA = "tabViewForm=tabViewForm&tabViewForm%3AtabView%3Aoptions5_focus=&tabViewForm%3AtabView%3Aoptions5_input=&tabViewForm%3AtabView%3Aoptions6_focus=&tabViewForm%3AtabView%3Aoptions6_input=&tabViewForm%3AtabView%3Aoptions7_focus=&tabViewForm%3AtabView%3Aoptions7_input=&tabViewForm%3AtabView%3Aoptions8_focus=&tabViewForm%3AtabView%3Aoptions8_input=&tabViewForm%3AtabView%3AcolumnsId_focus=&tabViewForm%3AtabView%3AcolumnsId=ETF+Name&tabViewForm%3AtabView%3AcolumnsId=Ticker&tabViewForm%3AtabView%3AcolumnsId=ISIN&tabViewForm%3AtabView%3AcolumnsId=Trading+Ccy&tabViewForm%3AtabView%3AcolumnsId=TER&tabViewForm%3AtabView%3AcolumnsId=AUM&tabViewForm%3AtabView%3AcolumnsId=Dividend+Treatment&tabViewForm%3AtabView%3AcolumnsId=Inception+Date&tabViewForm%3AtabView%3AcolumnsId=Fund+Type&tabViewForm%3AtabView%3AcolumnsId=Replication+Method&tabViewForm%3AtabView%3AcolumnsId=NAV&tabViewForm%3AtabView%3AcolumnsId=1Y&tabViewForm%3AtabView%3AcolumnsId=3Y&tabViewForm%3AtabView%3AcolumnsId=5Y&tabViewForm%3AtabView%3AcolumnsId=Index+Ticker&tabViewForm%3AtabView%3AcolumnsId=Factsheets&tabViewForm%3AtabView%3AcolumnsId=KIID&tabViewForm%3AtabView%3AcolumnsId=Prospectus&tabViewForm%3AtabView%3AcolumnsId=Mnemo&tabViewForm%3AtabView%3AcolumnsId=Tax+data+%28PEA%29&tabViewForm%3AtabView%3AshareDatatable_rppDD=10&tabViewForm%3AtabView_activeIndex=0&tabViewForm%3AtabView_scrollState=0&javax.faces.ViewState=-5754685498185340066%3A-4854945738216683285&tabViewForm%3AtabView%3AexportToXlsShare=tabViewForm%3AtabView%3AexportToXlsShare"
I затем получите повара ie, выполнив следующие действия:
response = session.get('https://www.lyxoretf.co.uk/en/instit/products/search')
cookie = session.cookies.get_dict()
cookie_string = "; ".join([str(x)+"="+str(y) for x,y in cookie.items()])
теперь готов сделать запрос на сообщение:
HEADERS["Cookie"] = cookie_string
r = requests.post(
"https://www.lyxoretf.co.uk/en/instit/products-pretty/search-pretty",
data=FORM_DATA,
headers=HEADERS,
)
, но r.content
оказывается b""
, и код состояния 200
. Я вижу, что заголовки ответа тоже неверны. Чего мне не хватает?