#python #urllib2
#python #urllib2
Вопрос:
Я использую HttpRedirecthandler urllib2 для получения перенаправления URL. Код выглядит следующим образом:
import urllib2, cookielib
class HTTPRedirectHandler(urllib2.HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
newreq = urllib2.HTTPRedirectHandler.redirect_request(self,
req, fp, code, msg, headers, newurl)
if newreq is not None:
self.redirections.append(newreq.get_full_url())
return newreq
def getListOfRedirectUrls(adUrl):
urlList = []
h = HTTPRedirectHandler()
h.max_redirections = 100
h.redirections = [adUrl]
opener = urllib2.build_opener(h)
response = opener.open(adUrl)
for redirect in h.redirections:
urlList.append(redirect)
return urlList
Это отлично работает для большинства URL-адресов. Однако время от времени он выдает мне только первый URL, а не последнюю страницу (или любую промежуточную). Например, рекламная ссылка :
просто возвращает этот URL, но когда я вставляю URL в браузер, он отправляет меня на другую страницу. Как мне получить эту последнюю страницу программно? Я попытался использовать urlopen
var = urllib2.urlopen(url)
print var.geturl()
Но это также не дает окончательной целевой страницы. Обработчик перенаправления хорошо работает для большинства URL-адресов, поэтому я не знаю, в чем проблема для тех, которые этого не делают. У кого-нибудь есть идеи?
Комментарии:
1. Попробуйте модуль
requests
— он перенаправляет URL по умолчанию и имеетresponse.history
URL-адреса, посещенные во время перенаправления.2. Я попытался импортировать запросы и выполнить «response = requests.get(url)», но response.history возвращает пустой список.
3. Я проверил этот URL — он перенаправляется JavaScript 🙂 Так
urllib
что ,urllib2
,requests
не будет работать с этим. Вам нужен какой-нибудь симулятор браузера с JavaScript, например Selenium , если вам это действительно нужно4. Ах, это имеет смысл, спасибо
5.
newreq
имеетurl
строку, ноget_full_url
для меня нет функции