Ho creato uno script per ottenere gli elementi html da una pagina di destinazione inviando successivamente due richieste https. La mia sceneggiatura può fare la cosa in modo impeccabile. Tuttavia, ho dovuto copiare i quattro valori dagli strumenti di sviluppo di Chrome per compilare le quattro chiavi payload
al fine di inviare le richieste http finali per raggiungere la pagina di destinazione. Questo è il link iniziale e di seguito la descrizione di come ho potuto raggiungere la pagina di destinazione.
- Fare clic sul
Find Hotel
pulsante (non è necessario modificare le date se lachek-out
data è per impostazione predefinita almeno un giorno in più rispetto allacheck-in
data). - Spuntare la casella come l'immagine qui sotto e premere il
Book Now
pulsante appena sopra di essa. Ora, dovrebbe portarti automaticamente alla pagina di destinazione. - Una volta raggiunta la pagina di destinazione intitolata come
Enter Guest Details
, analizzare gli elementi html da lì
Ho provato con (funzionante):
import requests
from bs4 import BeautifulSoup
url = 'https://booking.discoverqatar.qa/SearchHandler.aspx?'
second_url = 'https://booking.discoverqatar.qa/PassengerDetails.aspx?'
params = {
'Module':'H','txtCity':'','hdnCity':'2947','txtHotel':'','hdnHotel':'',
'fromDate':'05/11/2019','toDate':'07/11/2019','selZone':'','minSelPrice':'',
'maxSelPrice':'','roomConfiguration':'2|0|','noOfRooms':'1',
'hotelStandardArray':'63,60,54,50,52,51','CallFrom':'','DllNationality':'-1',
'HdnNoOfRooms':'-1','SourceXid':'MTEzNzg=','mdx':''
}
payload = {
'CallFrom':'MToxNjozOCBQTXxCMkN8MToxNjozOCBQTQ==',
'Btype':'MToxNjozOCBQTXxBfDE6MTY6MzggUE0=',
'PaxConfig':'MToxNjozOCBQTXwyfDB8MnwwfHwxOjE2OjM4IFBN',
'usid':'MToxNjozOCBQTXxoZW54dmkzcWVnc3J3cXpld2lsa2ZwMm18MToxNjozOCBQTQ=='
}
with requests.Session() as s:
r = s.get(url,params=params,headers={"User-agent":"Mozilla/5.0"})
res = s.get(second_url,params=payload,headers={
"User-agent":"Mozilla/5.0",
"Referer":r.url
})
soup = BeautifulSoup(res.text,'lxml')
print(soup)
Nello script precedente che ho copiato e incollato il valore di CallFrom
, Btype
, PaxConfig
e usid
da strumenti di sviluppo per l'uso all'interno payload
.
Come posso inserire automaticamente i valori da utilizzare nel payload?
Btype
potrebbe trattarsi di un valore dinamico corrispondente alle opzioni scelte dal primo passaggio. PaxConfig
potrebbe anche essere in un formato diverso se i passeggeri includono bambini.