使用请求的Python Web Scraper - 不像它应该重定向

时间:2015-02-01 05:18:16

标签: python scripting web-scraping

所以我很无聊,我决定做一些网页抓取只是为了好玩,并努力学习我的编程技巧。我试图抓住一个更“困难”的网站,如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数组是空的)。任何人对我做错了什么有任何想法?

1 个答案:

答案 0 :(得分:1)

requests将自动处理HTTP重定向,但不一定是其他类型的重定向。特别是,您链接的页面执行Javascript重定向(以及可能的其他Javascript行为)。请记住,requests是一个发出HTTP请求的库,但它没有实现适当的Web浏览器的所有行为(最明显的是Javascript)。

你可以通过研究页面内容和实现反映重定向的行为来解决这个问题。

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