我正在编写一个脚本,以找出大量缩短的URL会导致哪些完整的URL。我正在使用请求模块来跟踪重定向并获取在浏览器中输入URL时最终会出现的URL。这适用于几乎所有的链接缩短程序,但由于我无法弄清楚的原因(例如对于disq.us URL我得到了相同的URL,而在我在浏览器中输入时,我得到了disq.us)重定向)
下面是一个片段,它可以正确解析缩短链接的链接,但是使用了disq.us-link失败了。我使用Python 3.6.4和请求模块的2.18.4版运行它。 因此,我不允许在问题中包含缩短的网址,因此我会将其留在评论中。
import requests
user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36'
url1 = "SOME BITLY URL"
url2 = "SOME DISQ.US URL"
for url in [url1, url2]:
s = requests.Session()
s.headers['User-Agent'] = user_agent
r = s.get(url, allow_redirects=True, timeout=10)
print(r.url)
答案 0 :(得分:1)
我的第一个网址是404。有趣的是,我只是尝试使用第二个URL并且它有效,但我使用了不同的用户代理。然后我尝试使用您的用户代理,但它没有重定向。
这表明网络服务器在响应该用户代理字符串时做了一些奇怪的事情,问题不在于requests
。
>>> import requests
>>> user_agent = 'foo'
>>> url = 'THE_DISCUS_URL'
>>> s = requests.Session()
>>> s.headers['User-Agent'] = user_agent
>>> r = s.get(url, allow_redirects=True, timeout=10)
>>> r.url
'https://www.elsevier.com/connect/could-dissolvable-microneedles-replace-injected-vaccines'
VS
>>> import requests
>>> user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36'
>>> url = 'THE_DISCUS_URL'
>>> s = requests.Session()
>>> s.headers['User-Agent'] = user_agent
>>> r = s.get(url, allow_redirects=True, timeout=10)
>>> r.url
'THE_DISCUS_URL'
我很好奇,所以我调查了一下。响应的实际内容是带有链接的noscript标记,以及执行重定向的一些javascript。
这里可能会发生的事情是,如果铁饼看到真正的webbrowser用户代理,它会尝试通过javascript重定向(并且可能会在此过程中进行一系列跟踪)。另一方面,如果用户代理不熟悉,该站点假定访问者是一个脚本,可能无法执行javascript,只是重定向。