Saya telah membuat skrip untuk mendapatkan elemen html dari halaman target dengan mengirimkan dua permintaan https selanjutnya. Script saya dapat melakukan hal itu dengan sempurna. Namun, saya harus menyalin empat nilai dari alat dev chrome untuk mengisi empat kunci di payload
dalam untuk mengirim permintaan http akhir untuk mencapai halaman target. Ini adalah tautan awal dan berikut adalah uraian bagaimana saya dapat mencapai halaman target.
- Klik
Find Hotel
tombol (tidak perlu mengubah tanggal jikachek-out
tanggal secara default setidaknya satu hari lebih lama daricheck-in
tanggal). - Centang kotak seperti gambar di bawah ini dan tekan
Book Now
tombol tepat di atasnya. Sekarang, itu akan mengarahkan Anda ke halaman target secara otomatis. - Setelah mencapai halaman target berjudul
Enter Guest Details
, parsing elemen html dari sana
Saya sudah mencoba (bekerja):
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)
Dalam script di atas saya sudah disalin dan disisipkan nilai CallFrom
, Btype
, PaxConfig
dan usid
dari dev alat untuk digunakan di dalam payload
.
Bagaimana saya bisa mengisi nilai secara otomatis untuk digunakan dalam muatan?
python
python-3.x
web-scraping
MITHU
sumber
sumber
Btype
mungkin nilai dinamis yang sesuai dengan opsi yang dipilih dari langkah pertama.PaxConfig
mungkin juga dalam format yang berbeda jika penumpang menyertakan anak-anak.Jawaban:
Params yang dikirim ke permintaan kedua adalah Base64 yang di- encode, setelah di-decode:
Pada pandangan pertama, Anda sudah melihat mereka berada dalam pola:
Di mana
$date
waktu saat ini dalam formatutc_ts_now.strftime("%I:%M:%S %p")
.Untuk
$param
bagian dari empat parameter ini, saya kira itu harus diperbaikiCallFrom
danBtype
,usid
adalah kunci sesi , Anda dapat menemukannya dengan mudah di respons sebelumnya.PaxConfig
adalah jumlah tamu, ini terkait denganroomConfiguration
Anda mengirim permintaan pertama.Untuk mengotomatiskan permintaan kedua, Anda akan menghasilkan nilai yang didekodekan untuk setiap parameter terlebih dahulu, kemudian menyandikannya
Base64
.Memperbarui:
sumber