2017-01-20 4 views
-3

Я пытаюсь очистить WizzAir для личного использования. Не могу понять, что не так с моим кодом. Это может быть неправильный объект полезной нагрузки или файлы cookie?Wizzair scraping

import requests 

headers = { 
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36", 
    "Accept": "application/json, text/plain, */*", 
    "Accept-Encoding": "gzip, deflate, sdch, br", 
    "Accept-Language": "en-US,en;q=0.8,lt;q=0.6,ru;q=0.4", 
    "Origin": "https://wizzair.com", 
    "Referer": "https://wizzair.com/" 

} 

search_url = "https://wizzair.com/lt-LT/FlightSearch" 
session = requests.Session() 
r = session.get("https://be.wizzair.com/3.8.2/Api/asset/yellowRibbon", headers=headers, allow_redirects=False) 
session_id = r.cookies["ASP.NET_SessionId"] 

cookies = { 
    "ASP.NET_SessionId": session_id, 
    "HomePageSelector": "FlightSearch", 
} 

# wizz_url = "https://be.wizzair.com/3.8.2/Api/search/search" 
wizz_url = "https://be.wizzair.com/3.8.2/Api/asset/farechart" 
payload = {"flightList":[{"departureStation":"VNO","arrivalStation":"FCO","departureDate":"2017-02-20"}],"adultCount":1,"childCount":0,"infantCount":0,"wdc":True, "dayInterval":3} 
r = session.post(url=wizz_url,data=payload,headers=headers, cookies=cookies) 
print r.content 


>>> {"validationCodes":["FlightCount_MustBe_OneOrTwo"]} 
+0

BTW: с помощью 'Session' вы можете установить заголовки в начале, используя' session.header', и вам не нужно устанавливать его в каждом запросе. И с 'Session' вам не нужно копировать файлы cookie с одного запроса на другой -' Session' делает это автоматически. – furas

+0

BTW: попробуйте свои URL-адреса в браузере, и вы увидите, что 'https://be.wizzair.com/3.8.2/Api/asset/culture" 'не работает с GET. – furas

+0

Извините, я проверил несколько URL-адресов на вкладке «Сеть» и оставил не тот, но, видимо, это не главная проблема. –

ответ

0

Я запускаю это - даже без сеанса и файлов cookie - и получаю некоторые данные.

Вы должны отправить его в качестве JSON - используя json=payload

import requests 

payload = { 
    "flightList":[ 
     { 
      "departureStation": "VNO", 
      "arrivalStation": "FCO", 
      "departureDate": "2017-02-20" 
     } 
    ], 
    "adultCount": 1, 
    "childCount": 0, 
    "infantCount": 0, 
    "wdc": True, 
    "dayInterval": 3 
} 

url = 'https://be.wizzair.com/3.8.2/Api/search/search' 

r = requests.post(url, json=payload) 

print(r.text) 

data = r.json() 

print(data['outboundFlights'][0]['flightNumber']) 

Если вы будете использовать куки и заголовки затем использовать Session и тогда вам не придется копировать печенье и заголовки от одного запроса к другому ,

import requests 

headers = { 
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36", 
    #"Accept": "application/json, text/plain, */*", 
    #"Accept-Encoding": "gzip, deflate, sdch, br", 
    #"Accept-Language": "en-US,en;q=0.8,lt;q=0.6,ru;q=0.4", 
} 

s = requests.Session() 
s.headers.update(headers) 

# to get cookies 
r = s.get("https://www.wizzair.com/") 

payload = { 
    "flightList":[ 
     { 
      "departureStation": "VNO", 
      "arrivalStation": "FCO", 
      "departureDate": "2017-02-20" 
     } 
    ], 
    "adultCount": 1, 
    "childCount": 0, 
    "infantCount": 0, 
    "wdc": True, 
    "dayInterval": 3 
} 

url = 'https://be.wizzair.com/3.8.2/Api/search/search' 

r = s.post(url, json=payload) 

print(r.text) 

data = r.json() 

print(data['outboundFlights'][0]['flightNumber'])