Wizzair scraping - python

I'm trying to scrape WizzAir for personal use. Can't understand what's wrong with my code. Could it be incorrect payload object or cookies?
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"]}

I run this - even without session and cookies - and get some data.
You have to send it as JSON - using 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'])
If you will have to use cookies and headers then use Session and then you don't have to copy cookies and headers from one request to another.
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'])

Related

Python: Replace Python text - CURL Python

I need the variable defined as NUEMRODEDNI to be tempered, how is it done?
Excuse me I'm a newbie
I don't know how to use a variable defined in python, I need it to be replaced as shown in the image
import string
import requests
from requests.structures import CaseInsensitiveDict
url = "www.url.com:8022/SistemaIdentificacion/servlet/com.personas.consultapersona?030bf8cfcd4bfccbd543df61b1b43f67,gx-no-cache=1648440596691"
NUEMRODEDNI = "41087712"
headers = CaseInsensitiveDict()
headers["User-Agent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0"
headers["Accept"] = "*/*"
headers["Accept-Language"] = "es-AR,es;q=0.8,en-US;q=0.5,en;q=0.3"
headers["Accept-Encoding"] = "gzip, deflate"
headers["GxAjaxRequest"] = "1"
headers["Content-Type"] = "application/json"
headers["AJAX_SECURITY_TOKEN"] = "a6da9873adb..."
headers["X-GXAUTH-TOKEN"] = "eyJ0eXAiOiJ..."
headers["Origin"] = "http://www.url.com"
headers["Connection"] = "keep-alive"
headers["Referer"] = "www.url.com/SistemaIdentificacion/servlet/com.personas.consultapersona"
headers["Cookie"] = "GX_CLIENT_ID=0496f100-9e4e-4e36-a68d-ba3770ee2bff; GX_SESSION_ID=KUqyHU%2FZbpu96sYlj7Gry8bCYpV6CaSgVk0BLxVCpAU%3D; JSESSIONID=1812E6AC00940BDB325EF9592CB93FF8; GxTZOffset=America/Argentina/Buenos_Aires"
data = '{"MPage":false,"cmpCtx":"","parms":[EDIT HERE,{"s":"M","v":[["","(None)"],["F","Femenino"],["M","Masculino"]]},"M",{"User":"","CompanyCode":0,"Profile":"","UsrOneLoginID":"6647","Depid":1,"UsrLP":6488,"unidad":"","unidadid":"68","IMFParteCuerpo":"","denunciasid":0,"destino":"68","TipoPersona":"","NombreArchivo":"","denorigen":"","macdestinoscodorganigrama":""}],"hsh":[],"objClass":"consultapersona","pkgName":"com.personas","events":["ENTER"],"grids":{}}'
resp = requests.post(url, headers=headers, data=data)
print(resp.content)
Please provide your code typed out rather than a screenshot of it, so that we can simply copy & run it on our end.
Nontheless you should try:
NUMERODNI = "41087712"
data = '{"MPage":false,"cmpCtx":"","parms":[EDIT HERE,{"s":"M","v":[["","(None)"],["F","Femenino"],["M","Masculino"]]},"M",{"User":"","CompanyCode":0,"Profile":"","UsrOneLoginID":"6647","Depid":1,"UsrLP":6488,"unidad":"","unidadid":"68","IMFParteCuerpo":"","denunciasid":0,"destino":"68","TipoPersona":"","NombreArchivo":"","denorigen":"","macdestinoscodorganigrama":""}],"hsh":[],"objClass":"consultapersona","pkgName":"com.personas","events":["ENTER"],"grids":{}}'
data = data.replace("EDIT HERE", NUMERODNI)
print(data) # '{... "parms":[41087712, ...}'
This solution definetly delivers the desired string as result.
If your code still does not do what you would like it to, then the actual issue has to be somewhere else.
Since you're POSTing JSON data, it's easier to just keep your data as a Python dict and tell Requests to JSON-ify it (requests.post(json=...)).
That way you don't need string substitution, just use the variable.
I also took the opportunity to make your headers construction shorter – it can just be a dict.
import requests
url = "www.url.com:8022/SistemaIdentificacion/servlet/com.personas.consultapersona?030bf8cfcd4bfccbd543df61b1b43f67,gx-no-cache=1648440596691"
NUEMRODEDNI = "41087712"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0",
"Accept": "*/*",
"Accept-Language": "es-AR,es;q=0.8,en-US;q=0.5,en;q=0.3",
"Accept-Encoding": "gzip, deflate",
"GxAjaxRequest": "1",
"Content-Type": "application/json",
"AJAX_SECURITY_TOKEN": "a6da9873adb...",
"X-GXAUTH-TOKEN": "eyJ0eXAiOiJ...",
"Origin": "http://www.url.com",
"Connection": "keep-alive",
"Referer": "www.url.com/SistemaIdentificacion/servlet/com.personas.consultapersona",
"Cookie": "GX_CLIENT_ID=0496f100-9e4e-4e36-a68d-ba3770ee2bff; GX_SESSION_ID=KUqyHU%2FZbpu96sYlj7Gry8bCYpV6CaSgVk0BLxVCpAU%3D; JSESSIONID=1812E6AC00940BDB325EF9592CB93FF8; GxTZOffset=America/Argentina/Buenos_Aires",
}
data = {
"MPage": False,
"cmpCtx": "",
"parms": [
NUEMRODEDNI,
{"s": "M", "v": [["", "(None)"], ["F", "Femenino"], ["M", "Masculino"]]},
"M",
{
"User": "",
"CompanyCode": 0,
"Profile": "",
"UsrOneLoginID": "6647",
"Depid": 1,
"UsrLP": 6488,
"unidad": "",
"unidadid": "68",
"IMFParteCuerpo": "",
"denunciasid": 0,
"destino": "68",
"TipoPersona": "",
"NombreArchivo": "",
"denorigen": "",
"macdestinoscodorganigrama": "",
},
],
"hsh": [],
"objClass": "consultapersona",
"pkgName": "com.personas",
"events": ["ENTER"],
"grids": {},
}
resp = requests.post(url, headers=headers, json=data)
resp.raise_for_status()
print(resp.content)

Script gets stuck while sending post requests with parameters

I'm trying to populate json response issuing a post http requests with appropriate parameters from a webpage. When I run the script, I see that the script gets stuck and doesn't bring any result. It doesn't throw any error either. This is the site link. I chose three options from the three dropdowns from this form in that site before hitting Get times & tickets button.
I've tried with:
import requests
from bs4 import BeautifulSoup
url = 'https://www.thetrainline.com/'
link = 'https://www.thetrainline.com/api/journey-search/'
payload = {"passengers":[{"dateOfBirth":"1991-01-31"}],"isEurope":False,"cards":[],"transitDefinitions":[{"direction":"outward","origin":"1f06fc66ccd7ea92ae4b0a550e4ddfd1","destination":"7c25e933fd14386745a7f49423969308","journeyDate":{"type":"departAfter","time":"2021-02-11T22:45:00"}}],"type":"single","maximumJourneys":4,"includeRealtime":True,"applyFareDiscounts":True}
with requests.Session() as s:
s.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36'
s.headers['content-type'] = 'application/json'
s.headers['accept'] = 'application/json'
r = s.post(link,json=payload)
print(r.status_code)
print(r.json())
How can I get json response issuing post requests with parameters from that site?
You are missing the required headers: x-version and referer. The referer header is referring to the search form and you can build it. Before journey-search you have to post an availability request.
import requests
from requests.models import PreparedRequest
headers = {
'authority': 'www.thetrainline.com',
'pragma': 'no-cache',
'cache-control': 'no-cache',
'x-version': '2.0.18186',
'dnt': '1',
'accept-language': 'en-GB',
'sec-ch-ua-mobile': '?0',
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/88.0.4324.96 Safari/537.36',
'content-type': 'application/json',
'accept': 'application/json',
'origin': 'https://www.thetrainline.com',
'sec-fetch-site': 'same-origin',
'sec-fetch-mode': 'cors',
'sec-fetch-dest': 'empty',
}
with requests.Session() as s:
origin = "6e2242b3f38bbbd8d8124e1d84d319e1"
destination = "15bcf02bc44ea754837c8cf14569f608"
localDateTime = "2021-02-03T19:30:00"
dateOfBirth = "1991-02-03"
passenger_type = "single"
req = PreparedRequest()
url = "http://www.neo4j.com"
params = {
"origin": origin,
"destination": destination,
"outwardDate": localDateTime,
"outwardDateType": "departAfter",
"journeySearchType": passenger_type,
"passengers[]": dateOfBirth
}
req.prepare_url("https://www.thetrainline.com/book/results", params)
headers.update({"referer": req.url})
s.headers = headers
payload_availability = {
"origin": origin,
"destination": destination,
"outwardDefinition": {
"localDateTime": localDateTime,
"searchMethod": "DEPARTAFTER"
},
"passengerBirthDates": [{
"id": "PASSENGER-0",
"dateOfBirth": dateOfBirth
}],
"maximumNumberOfJourneys": 4,
"discountCards": []
}
r = s.post('https://www.thetrainline.com/api/coaches/availability', json=payload_availability)
r.raise_for_status()
payload_search = {
"passengers": [{"dateOfBirth": "1991-02-03"}],
"isEurope": False,
"cards": [],
"transitDefinitions": [{
"direction": "outward",
"origin": origin,
"destination": destination,
"journeyDate": {
"type": "departAfter",
"time": localDateTime}
}],
"type": passenger_type,
"maximumJourneys": 4,
"includeRealtime": True,
"applyFareDiscounts": True
}
r = s.post('https://www.thetrainline.com/api/journey-search/', json=payload_search)
r.raise_for_status()
print(r.json())
As Sers's reply, headers are missing.
When scrawling websites, you have to keep in mind anti-scrawling mechanism. The website will block your requests by taking into consideration your IP address, request headers, cookies, and various other factors.

Not able to scrape some values from a website

I'm trying to scrape this site https://acsd.crimegraphics.com, but I am getting only one record. Also, I don't know how to do this in a loop. I'm not able to scrape specific data. Here is the code that I have come up with so far.
import re
import requests
headers = {}
headers["Accept"] = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3"
headers["Accept-Encoding"] = "gzip, deflate, br"
headers["Accept-Language"] = "en-GB,en-US;q=0.9,en;q=0.8"
headers["Cache-Control"] = "max-age=0"
headers["Connection"] = "keep-alive"
headers["Content-Length"] = "31688"
headers["Content-Type"] = "application/x-www-form-urlencoded"
headers["Cookie"] = "ASP.NET_SessionId=4z2ypzsqxnug03cf5ztitpfx; ExistingVisitor=ExistingVisitor=Y; __utma=114720600.1520129764.1565270251.1565270251.1565270251.1; __utmc=114720600; __utmz=114720600.1565270251.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmt=1; __utmb=114720600.1.10.1565270251"
headers["Host"] = "acsd.crimegraphics.com"
headers["Origin"] = "https://acsd.crimegraphics.com"
headers["Referer"] = "https://acsd.crimegraphics.com/2013/default.aspx"
headers["Upgrade-Insecure-Requests"] = "1"
headers["User-Agent"] = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36"
payload = {}
payload["__EVENTTARGET"] = "MainMenu$InmatesMenu"
payload["__EVENTARGUMENT"] = "InmatesMenu"
url = "https://acsd.crimegraphics.com/2013/default.aspx"
r = requests.post(url, headers=headers, data=payload)
#print(r.text)
headers1 = {}
headers1["Accept"] = "*/*"
headers1["Accept-Encoding"] = "gzip, deflate, br"
headers1["Accept-Language"] = "en-GB,en-US;q=0.9,en;q=0.8"
headers1["Cache-Control"] = "no-cache"
headers1["Connection"] = "keep-alive"
headers1["Content-Length"] = "58838"
headers1["Content-Type"] = "application/x-www-form-urlencoded; charset=UTF-8"
headers1["Cookie"] = "ASP.NET_SessionId=4z2ypzsqxnug03cf5ztitpfx; __utma=114720600.1520129764.1565270251.1565270251.1565270251.1; __utmc=114720600; __utmz=114720600.1565270251.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmb=114720600.2.10.1565270251"
headers1["Host"] = "acsd.crimegraphics.com"
headers1["Origin"] = "https://acsd.crimegraphics.com"
headers1["Referer"] = "https://acsd.crimegraphics.com/2013/default.aspx"
headers1["User-Agent"] = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36"
payload1 = {}
payload1["ScriptManager1"] = "UpdatePanel1|gvInmates_ob_gvInmatesPE"
payload1["__EVENTTARGET"] = "gvInmates_ob_gvInmatesPE 77886"
payload1["__EVENTARGUMENT"] = ""
payload1["__LASTFOCUS"] = ""
payload1["__VIEWSTATE"] = "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"
payload1["__VIEWSTATEGENERATOR"] = "38817EFB"
payload1["__VIEWSTATEENCRYPTED"] = ""
payload1["gvInmates$ob_gvInmatesSelectedRecordsContainer"] = "BOOKNO*_o_eg_*77882*_o_sep_*NAME*_o_eg_*GANNON%2C%20COURTNEY%20BETH*_o_sep_*BOOKDATE*_o_eg_*08%2F07%2F2019%2012%3A40*_o_sep_*ARSTAGENCY*_o_eg_*ACSO*_o_sep_*ARSTLOC*_o_eg_*SAN%20JOAQUIN%20CO*_o_sep_*STATUS*_o_eg_*In%20Custody*_o_osep_*true"
r2 = requests.post(url, headers=headers1, data=payload1)
print(r2.text)

Getting a Bad Request when im Posting Data with requests

Im always getting the error message "Bad Request" when im trying to Post data to steam, i did lot of resears and i dont know how to fix this.
Post Values:
# Post Values
total = int(item['price'])
fee = int(item['fee'])
subtotal = total-fee
Cookies:
# Cookies
c = []
c.append('steamMachineAuthXXXXXXXXXXXXXXXXX='+steamMachineAuth)
c.append('steamLogin='+steamLogin)
c.append('steamLoginSecure='+steamLoginSecure)
c.append('sessionid='+sessionid)
cookie = ''
for value in c:
cookie = cookie+''+value+'; '
Headers:
# Headers
headers = {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4",
"Connection": "keep-alive",
"Host": "steamcommunity.com",
"Referer": hosturl+"market/listings/"+appid+"/"+item['market_hash_name'],
"Cookie": cookie,
"Origin": hosturl,
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36",
"X-Requested-With": "XMLHttpRequest"
}
Post data:
# Post Data
post = {
'sessionid': sessionid,
'currency': int(currency),
'subtotal': subtotal,
'fee': fee,
'total': total,
'quantity': 1
}
Url:
# url
url = hosturl+'market/buylisting/'+item['listingid']
Sending Request:
# Sending Request
se = requests.Session()
re = se.post(url, data=post, headers=headers)
print re.reason
Output:
Bad Request
I can't speak specifically about the Steam service as I haven't used it yet, but my experience with typical Bad Request responses is that you're either trying an HTTP verb that isn't supported or your request is not formatted correctly.
In your case, I suspect it's the latter.
My first candidate to look at is your cookie formatting. Are you sure you don't have characters that need to be escaped?
I could suggest using something like this instead:
c = {
'steamMachineAuthXXXXXXXXXXXXXXXXX': steamMachineAuth,
'steamLogin': steamLogin,
'steamLoginSecure': steamLoginSecure,
'sessionid': sessionid
}
cookie = '; ',join('{}="{}"'.format(k, v) for k, v in c.items())

Request decoding in Python

import urllib.request
url = ""
http_header = {
"User-Agent": "Mozilla/5.0(compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0) like Gecko",
"Accept": "text/html, application/xhtml+xml, */*",
"Accept-Language": "ko-KR",
"Content-type": "application/x-www-form-urlencoded",
"Host": ""
}
params = {
'id': 'asdgasd',
'call_flag': 'idPoolChk',
'reg_type': 'NY'
}
data = urllib.parse.urlencode(params).encode()
req = urllib.request.Request(url, data)
response = urllib.request.urlopen(req)
the_page = response.read()
print(the_page)
When I run this program, I get:
\xec\x95\x84\xec\x9d\xb4\xeb\x94\x94\xea\xb0\x80 \xec\xa4\x91\xeb\xb3\xb5\xeb\x90\xa9\xeb\x8b\x88\xeb\x8b\xa4
How can I transform this to Korean?
It's UTF-8.
print(the_page.decode('utf-8'))
assuming your console will handle those characters.

Categories

Resources