Tôi đã tạo một tập lệnh để lấy các phần tử html từ trang đích bằng cách gửi hai yêu cầu https sau đó. Kịch bản của tôi có thể làm điều hoàn hảo. Tuy nhiên, tôi đã phải sao chép bốn giá trị từ các công cụ phát triển chrome để điền vào bốn khóa bên payload
trong để gửi các yêu cầu http cuối cùng để đến trang đích. Đây là liên kết bắt đầu và sau đây là mô tả về cách tôi có thể tiếp cận trang đích.
- Nhấp vào
Find Hotel
nút (không cần thay đổi ngày nếuchek-out
ngày theo mặc định ít nhất một ngày dài hơncheck-in
ngày). - Đánh dấu vào ô như hình bên dưới và nhấn
Book Now
nút ngay phía trên nó. Bây giờ, nó sẽ tự động dẫn bạn đến trang đích. - Khi đến trang đích có tiêu đề là
Enter Guest Details
, phân tích các phần tử html từ đó
Tôi đã thử với (làm việc một):
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)
Trong kịch bản trên, chúng tôi đã sao chép và dán giá trị của CallFrom
, Btype
, PaxConfig
và usid
từ dev công cụ để sử dụng trong phạm vi payload
.
Làm cách nào tôi có thể tự động điền các giá trị được sử dụng trong tải trọng?
Btype
có thể là giá trị động tương ứng với các tùy chọn được chọn từ bước đầu tiên. PaxConfig
cũng có thể ở một định dạng khác nếu hành khách bao gồm trẻ em.