我正在尝试使用请求模块抓取网站。
使用 chrome 和检查元素,我转到 url,填写表格并单击继续按钮。Chrome 的检查元素(网络文档)显示了 chrome 通过 post 发送的内容。它还显示多个 cookie。该站点重定向到一个带有会话 ID 的 URL。
为了模拟这一点,我尝试使用请求。我从检查元素中获取表单数据并将其重新格式化为字典。我使用 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'))
但是,请求似乎没有遵循重定向。history 是空的,并且 url 似乎是我发送的数据,而不是网站返回的数据。x.htm 显示一个网页,但不包含我预期的信息。
从http://docs.python-requests.org/en/latest/user/quickstart/#redirection-and-history我希望 r.url 包含重定向的 url 和 r.history 包含一个 http 响应代码。
我究竟做错了什么?