Python Web Scraper 使用请求 - 没有像它应该的那样重定向

Python Web Scraper Using Requests - Not Redirecting Like It Should

所以我很无聊,所以我决定做一些网页抓取只是为了好玩并提高我的编程技能。我试图抓取更多 "difficult" 网站,例如 http://www.aa.com(美国航空公司)。我说困难是因为它在您搜索航班后有一个重定向 url。

我当前的代码是:

    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 数组为空)。有人知道我做错了什么吗?

requests 将自动处理 HTTP 重定向,但不一定处理其他类型的重定向。特别是,您链接的页面会执行 Javascript 重定向(可能还有其他 Javascript 行为)。请记住,requests 是一个发出 HTTP 请求的库,但它没有实现适当网络浏览器的全部行为(最值得注意的是 Javascript)。

您可以通过研究页面内容和实施反映重定向的行为来解决此问题。

要在一般情况下正确处理此问题,您需要对网络浏览器的工作方式有更多了解。最常见的是,这将是一个由自动化库驱动的实际 Web 浏览器,例如 Selenium:https://pypi.python.org/pypi/selenium