我正在尝试使用python查找网址的最终重定向网址。我尝试了来自stackoverflow答案的各种解决方案,但对我没有用。我只得到原始网址。
具体来说,我尝试了requests
,urllib2
和urlparse
库,但它们都没有按预期运行。这是我尝试过的一些代码:
解决方案1:
s = requests.session()
r = s.post('https://www.boots.com/search/10055096', allow_redirects=True)
print(r.history)
print(r.history[1].url)
结果:
[<Response [301]>, <Response [302]>]
https://www.boots.com/search/10055096
解决方案2:
import urlparse
url = 'https://www.boots.com/search/10055096'
try:
out = urlparse.parse_qs(urlparse.urlparse(url).query)['out'][0]
print(out)
except Exception as e:
print('not found')
结果:
not found
解决方案3:
import urllib2
def get_redirected_url(url):
opener = urllib2.build_opener(urllib2.HTTPRedirectHandler)
request = opener.open(url)
return request.url
print(get_redirected_url('https://www.boots.com/search/10055096'))
结果:
HTTPError: HTTP Error 302: The HTTP server returned a redirect error that would lead to an infinite loop.
The last 30x error message was:
Found
下面的预期URL是最终重定向的页面,这就是我要返回的内容。
原始网址: https://www.boots.com/search/10055096
预期的网址: https://www.boots.com/gillette-fusion5-razor-blades-4pk-10055096
解决方案1是最接近的解决方案。至少它返回了2个响应,但第二个响应不是最后一页,似乎是正在查看其内容的加载页面。
答案 0 :(得分:1)
第一个请求返回一个html文件,该文件包含一个用于更新站点的JS,requests
未处理Java脚本。您可以使用
import requests
from bs4 import BeautifulSoup
import re
r = requests.get('https://www.boots.com/search/10055096')
soup = BeautifulSoup(r.content,'html.parser')
reg = soup.find('input',id='searchBoxText').findNext('script').contents[0]
print(re.search(r'ht[\w\://\.-]+', reg).group())