Я создал скрипт для получения html-элементов с целевой страницы путем последующей отправки двух запросов https. Мой сценарий может сделать вещь без нареканий. Однако мне пришлось скопировать четыре значения из инструментов chrome dev, чтобы заполнить четыре ключа внутри payload
, чтобы отправить окончательные http-запросы для достижения целевой страницы. Это начальная ссылка, а ниже приведено описание того, как я могу добраться до целевой страницы.
- Нажмите на
Find Hotel
кнопку (нет необходимости менять даты, еслиchek-out
по умолчанию дата по крайней мере на один день длиннееcheck-in
даты). - Установите флажок, как на изображении ниже, и нажмите
Book Now
кнопку над ним. Теперь он должен автоматически привести вас к целевой странице. - Достигнув целевой страницы с названием as
Enter Guest Details
, проанализируйте html-элементы оттуда
Я пытался с (работает):
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)
В приведенном выше сценарии я скопировать и вставить значение CallFrom
, Btype
, PaxConfig
и usid
от разработчика инструментов для использования в payload
.
Как я могу заполнить значения автоматически для использования в полезной нагрузке?
python
python-3.x
web-scraping
MITHU
источник
источник
Btype
может быть динамическое значение, соответствующее параметрам, выбранным на первом шаге.PaxConfig
также может быть в другом формате, если пассажиры включают детей.Ответы:
Параметры, отправляемые во второй запрос, кодируются Base64 , после декодирования они:
На первый взгляд, вы уже заметили, что они имеют вид:
Где
$date
текущее время в форматеutc_ts_now.strftime("%I:%M:%S %p")
.Для
$param
части этих четырех параметров, я предполагаю , что это должно быть исправлено наCallFrom
иBtype
,usid
является сессия ключ, вы можете легко найти ее в предыдущем ответе.PaxConfig
это количество гостей, это связано с тем, чтоroomConfiguration
вы отправили первый запрос.Чтобы автоматизировать второй запрос, вы должны сначала сгенерировать декодированное значение для каждого параметра, а затем кодировать их с помощью
Base64
.Обновить:
источник