MIT*_*THU 10 python web-scraping python-3.x
我创建了一个脚本,可通过随后发送两个https请求从目标页面获取html元素。我的脚本可以完美地完成任务。但是,我必须复制chrome开发工具中的四个值以填充其中的四个键payload,以便发送最终的http请求以到达目标页面。这是起始链接,下面是有关如何到达目标页面的说明。
Find Hotel按钮(如果chek-out默认情况下check-in日期比日期长至少一天,则无需更改日期)。Book Now按其上方的按钮。现在,它将引导您自动进入目标页面。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)
Run Code Online (Sandbox Code Playgroud)
在上面的脚本中,我已经复制和值粘贴CallFrom,Btype,PaxConfig并usid从开发工具中使用payload。
如何自动填写要在有效负载内使用的值?
发送到第二个请求的参数是Base64编码的,在解码后它们是:
'CallFrom':'1:16:38 PM|B2C|1:16:38 PM',
'Btype':'1:16:38 PM|A|1:16:38 PM',
'PaxConfig':'1:16:38 PM|2|0|2|0||1:16:38 PM',
'usid':'1:16:38 PM|henxvi3qegsrwqzewilkfp2m|1:16:38 PM'
Run Code Online (Sandbox Code Playgroud)
乍一看,您已经注意到它们的模式如下:
$date|$param|$date
Run Code Online (Sandbox Code Playgroud)
$date当前时间在哪里,格式为utc_ts_now.strftime("%I:%M:%S %p")。
对于$param这四个参数的部分,我想应该将其固定为CallFrom和Btype,usid它是会话密钥,您可以在上一个响应中轻松找到它。
PaxConfig是客人人数,与roomConfiguration您在第一个请求中发送的相关。
要自动执行第二个请求,您将首先为每个参数生成解码后的值,然后使用对其进行编码Base64。
更新:
'CallFrom':'1:16:38 PM|B2C|1:16:38 PM',
'Btype':'1:16:38 PM|A|1:16:38 PM',
'PaxConfig':'1:16:38 PM|2|0|2|0||1:16:38 PM',
'usid':'1:16:38 PM|henxvi3qegsrwqzewilkfp2m|1:16:38 PM'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
279 次 |
| 最近记录: |