簡體   English   中英

Python Web抓取請求遵循重定向

[英]Python web scraping requests follow redirect

我正在嘗試使用請求模塊抓取一個網站。

使用chrome和inspect元素,我轉到url,填寫表單並單擊繼續按鈕。 Chrome的檢查元素(網絡文檔)顯示了隨帖子發送的chrome。 它還顯示多個cookie。 該站點重定向到URL,其中包括會話ID。

為了模擬這個,我嘗試使用請求。 我從inspect元素中獲取表單數據並將其重新格式化為字典。 我使用requests.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'))

但是,請求似乎不遵循重定向。 歷史記錄為空,網址似乎是我發送的數據,而不是網站返回的數據。 x.htm顯示一個網頁,但不包含我預期的信息。

http://docs.python-requests.org/en/latest/user/quickstart/#redirection-and-history我希望r.url包含重定向的url和r.history包含一個http響應代碼。

我究竟做錯了什么?

好吧你做的似乎是錯的。 我不確定您是如何決定在https://www.aa.com/homePage.do上發送帖子的,但這似乎是一個獲取並且不會接受您發送的參數。 當您點擊搜索時,您的瀏覽器會發送以下帖子: https://www.americanairlines.co.uk/reservation/searchFlightsSubmit.do;jsessionid=XXXXXXXXXXXXXXXXXXXhttps://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回來。 preety mach你必須發送在瀏覽器中發送的所有請求。 用硒可能更容易。

我發現這使用httpfox可能類似於chrome網絡。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM