Python Web抓取请求遵循重定向

欺骗

我正在尝试使用请求模块抓取一个网站。

使用chrome和inspect元素,我转到url,填写表格,然后单击Continue按钮。Chrome浏览器的检查元素(网络文档)显示了随邮发送的Chrome。它还显示了多个cookie。该网站重定向到带有会话ID的URL。

为了模拟这一点,我尝试使用请求。我从检查元素中获取表单数据,然后将其重新格式化为字典。我使用request.session来包含cookie。

    import requests

form_data = 'currentCalForm=dep&currentCodeForm=&tripType=oneWay&searchCategory=award&originAirport=JFK&flightParams.flightDateParams.travelMonth=5&flightParams.flightDateParams.travelDay=14&flightParams.flightDateParams.searchTime=040001&destinationAirport=LHR&returnDate.travelMonth=-1000&returnDate.travelDay=-1000&adultPassengerCount=2&adultPassengerCount=1&serviceclass=coach&searchTypeMode=matrix&awardDatesFlexible=true&originAlternateAirportDistance=0&destinationAlternateAirportDistance=0&discountCode=&flightSearch=award&dateChanged=false&fromSearchPage=true&advancedSearchOpened=false&numberOfFlightsToDisplay=10&searchCategory=&aairpassSearchType=false&moreOptionsIndicator=oneWay&seniorPassengerCount=0&youngAdultPassengerCount=0&childPassengerCount=0&infantPassengerCount=0&passengerCount=2'.split('&')

payload = {}
for item in form_data:
    key, value = item.split('=')
    if value:
        payload[key] = value

with requests.session() as s:    
    r = s.post('https://www.aa.com/homePage.do', params = payload, allow_redirects=True)
    print r.headers
    print r.history
    print r.url
    print r.status_code
    with open('x.htm', 'wb') as f:
        f.write(r.text.encode('utf8'))

但是,请求似乎没有遵循重定向。历史记录为空,URL似乎是我发送的数据,而不是网站返回的数据。x.htm显示一个网页,但不包含我期望的信息。

http://docs.python-requests.org/en/latest/user/quickstart/#redirection-and-history中,我期望r.url包含重定向的url,而r.history包含http的响应代码。

我究竟做错了什么?

Foo Bar用户

好的,您所做的似乎是错误的。我不确定您是如何决定在上发送帖子的https://www.aa.com/homePage.do,但是这似乎是一种获取,并且不接受您发送的参数。当您单击搜索时,浏览器将发送以下信息:https://www.americanairlines.co.uk/reservation/searchFlightsSubmit.do;jsessionid=XXXXXXXXXXXXXXXXXXX和参数:

currentCalForm=dep
currentCodeFrom=
tripType=roundTrip
originAirport=LAX
flightParams.flightDateParams.travelMonth=10
flightParams.flightDateParams.travelDay=24
flightParams.flightDateParams.searchTime=040001
destinationAirport=JFK
returnDate.travelMonth=10
returnDate.travelDay=31
returnDate.searchTime=400001
adultPassengerCount=1
adultPassengerCount=1
childPassengerCount=0
hotelRoomCount=1
serviceclass=coach
searchTypeMode=matrix
awardDatesFlexible=true
originAlternateAirportDistance=0
destinationAlternateAirportDistance=0
discountCode=
flightSearch=revenue
dateChanged=false
fromSearchPage=true
advancedSearchOpened=false
numberOfFlightsToDisplay=10
searchCategory=
aairpassSearchType=false
moreOptionsIndicator=
seniorPassengerCount=0
youngAdultPassengerCount=0
infantPassengerCount=0
passengerCount=1

然后,这将为您提供HTML返回。漂亮的马赫,您必须发送所有在浏览器中发送的请求。使用硒可能更容易。

我发现使用httpfox可能类似于chrome网络。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

带有重定向的Python Web请求

来自分类Dev

使用请求的Python Web爬虫-不应该重定向

来自分类Dev

是否可以仅遵循重定向状态代码并获取重定向链接而不是在请求或其他 Python 库中下载网页?

来自分类Dev

Python Web 抓取重定向到其他页面的页面

来自分类Dev

带有重定向的python请求

来自分类Dev

python请求中的HTTP重定向代码3XX

来自分类Dev

如何使用python请求获取重定向网址

来自分类Dev

Python请求:如何从302重定向获取响应Cookie

来自分类Dev

Python请求-重定向后的身份验证

来自分类Dev

使用python请求和重定向获取HTML

来自分类Dev

Python请求-重定向后的身份验证

来自分类Dev

使用Python脚本响应中的请求进行Web抓取

来自分类Dev

Python输出重定向

来自分类Dev

茉莉花节点与请求-测试重定向的端点不遵循重定向

来自分类Dev

Python Web抓取问题

来自分类Dev

Python Web抓取失败

来自分类Dev

使用请求和 BeautifulSoup 抓取重定向的站点

来自分类Dev

使用Python请求抓取页面

来自分类Dev

python 抓取请求以获取 json

来自分类Dev

使用 python 请求抓取 json

来自分类Dev

在代理后面时,Python请求库无法处理HTTPS URL的重定向

来自分类Dev

Python:httplib和请求问题;https似乎会导致重定向,然后BadStatusLine异常

来自分类Dev

python套接字如何使用相同的套接字连接正确重定向http / s请求?

来自分类Dev

如何在某些极端情况下使用 Python 请求正确设置重定向

来自分类Dev

无法遵循重定向路径

来自分类Dev

“始终遵循重定向”的含义

来自分类Dev

仅遵循内部重定向

来自分类Dev

未遵循重定向规则

来自分类Dev

Python:重定向的消息顺序

Related 相关文章

热门标签

归档