所以我很无聊,我决定做一些网页抓取只是为了好玩,并努力学习我的编程技巧。我试图抓住一个更“困难”的网站,如http://www.aa.com(美国航空公司)。我说困难是因为搜索航班后它有一个重定向网址。
我目前的代码是:
import requests
from bs4 import BeautifulSoup
req = self.session.get("http://www.aa.com/homePage.do", allow_redirects=True)
cookies = req.cookies
params = {
"originAirport": "JFK",
"destinationAirport": "LAX",
"flightParams.flightDateParams.travelMonth": "3",
"flightParams.flightDateParams.travelDay": "11",
"flightParams.flightDateParams.searchTime": "120001",
"carrierPreference": "F",
"flightSearch": "revenue",
"tripType": "oneWay",
"fromSearchPage": "true",
"searchCategory": "false",
"adultPassengerCount": "1",
"searchType": "matrix"
}
req = self.session.post("http://www.aa.com/reservation/tripSearchSubmit.do;jsessionid=" + str(cookies.get("JSESSIONID")), data=params, allow_redirects=True);
soup = BeautifulSoup(req.text)
print(str(req.history) + "\n" + str(req.url))
print(soup.prettify())
但这不能正常工作。它只是带我到加载页面,但没有重定向到航班票价页面(req.history数组是空的)。任何人对我做错了什么有任何想法?
答案 0 :(得分:1)
requests
将自动处理HTTP重定向,但不一定是其他类型的重定向。特别是,您链接的页面执行Javascript重定向(以及可能的其他Javascript行为)。请记住,requests
是一个发出HTTP请求的库,但它没有实现适当的Web浏览器的所有行为(最明显的是Javascript)。
你可以通过研究页面内容和实现反映重定向的行为来解决这个问题。
要在一般情况下正确处理此问题,您需要更多地了解Web浏览器的工作方式。最常见的是,这将是由自动化库驱动的实际Web浏览器,例如Selenium:https://pypi.python.org/pypi/selenium