我想抓取請求模塊的網站。Python的網絡抓取請求遵循重定向
使用chrome和檢查元素,我轉到url,填寫表單並單擊繼續按鈕。 Chrome瀏覽器的檢測元素(網絡文檔)顯示了郵件發送的郵件內容。它還顯示多個Cookie。該網站重定向到一個網址,其中包括一個會話ID。
爲了模擬這個,我嘗試使用請求。我從檢查元素中獲取表單數據並將其重新格式化爲字典。我使用requests.session來包含cookie。
import requests
form_data = 'currentCalForm=dep¤tCodeForm=&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響應代碼。
我在做什麼錯?
你知道如何使用wireshark嗎? –
請在瀏覽器中禁用JavaScript,因爲請求不會解析或運行JavaScript。我也不確定它是否遵循該網站可能正在做的meta重定向。 – justinfay
@OfirIsrael我以爲wireshark是監測低級別的網絡流量。如何在這裏使用? – foosion