Python — HTTPRedirectHandler не всегда получает перенаправления

#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, а не последнюю страницу (или любую промежуточную). Например, рекламная ссылка :

http://trc.taboola.com/wtffunfact/log/3/click?pi=/amp;ri=4c376c94a4413aaace150a3cd2b9d902amp;sd=v2_b935da3ff37d8b8efc9f1aeaf46df13b_3932b8b5d26526ed68d78d4ca0b1c52d_1403183649_1403183649_CN6AAQamp;ui=3932b8b5d26526ed68d78d4ca0b1c52damp;it=videoamp;ii=~~V1~~-2280573428682392386~~Uno41aIn9FS4V6KLu4hReNH33hC7jIMtL3ZKEwlHBjLt20WtOFlYyBFp19r7BzDGoDxni1tDH9vJwwB-9GbnkAamp;pt=homeamp;li=rbox-h2vamp;redir=http://livingwelltrends.com/3/?src=tabnamp;query=ad3amp;net=desktopamp;ad=food7amp;utm_source=taboolaamp;utm_medium=рефералamp;utm_content=wtffunfactamp;p= jmedia-scamp; vi = 1403183649792amp; r = 2

просто возвращает этот 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 для меня нет функции