我正在尝试缩短大约150,000个t.co链接的列表,并且我的代码在大多数情况下都有效,但是,我有一堆t.co链接都重定向了here,出于某种原因请求获得太多重定向。
def expand_url(url):
s = requests.Session()
try:
r = s.head(url.rstrip(), allow_redirects=True,verify=False)
return r.url.rstrip()
except requests.exceptions.ConnectionError as e:
print(e)
我尝试使用线路
s.headers['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'
如另一个线程中所建议。我还尝试增加最大重定向次数,但这并没有帮助。
以下是导致问题的一些t.co链接:
https://t点co / 5FXvHY1Rbx
https://t点co / L3Ytnz2916
关于做什么的任何建议?
谢谢
答案 0 :(得分:1)
设置您可以承受的最大重定向次数。
http://docs.python-requests.org/en/master/api/#requests.Session.max_redirects
s = requests.Session()
s.max_redirects = 3
由于WH不支持head方法而陷入死循环的原因,它会不断向您发送302 Moved Temporarily
。但实际上您已将完成重定向(从短网址重定向到WH)。尝试使用r.history
查看所有回复
import requests
def expand_url(url):
s = requests.Session()
#s.allow_redirects = -1
try:
r = s.get(url.rstrip(),allow_redirects=3,verify=False)
print([resp.url for resp in r.history])
return r.url.rstrip()
except requests.exceptions.ConnectionError as e:
print(e)
print(expand_url("https://t<dot>co/5FXvHY1Rbx"))
您还可以编写自己的max_redirects。
import requests
def expand_url(url,times):
s = requests.Session()
times -= 1
if not times:
return url
try:
r = s.head(url.rstrip(),verify=False)
location = r.headers.get("location").rstrip()
if url.find(location) > 0:
# in case redirect to same page
return url
next_step = expand_url(location,times) if location else url
return next_step
except requests.exceptions.ConnectionError as e:
print(e)
print(expand_url("https://t<dot>co/5FXvHY1Rbx",4))