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
所以我很无聊,所以我决定做一些网页抓取只是为了好玩并提高我的编程技能。我试图抓取更多 "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