当商店开火时,我需要检测网址更改,我使用请求lib而没有运气即使启用了firesale仍然会返回No deals on today
并且检查值仍为{{1} }
主店铺网址
[u'http:', u'', u'www.dealwebsite.co', u'Electroshop']
如果firesale交易在主要商店网址上,则更改为重定向
http://www.dealwebsite.com/coolshop
http://www.dealwebsite.com/coolshop/firesale
答案 0 :(得分:1)
您似乎可以track redirection。例如:
requests.get(url, headers=headers, timeout=3, allows_redirect=True)
>>> r.url
'url'
>>> r.status_code
200
>>> r.history
[<Response [301]>] # means that there was a redirect on the way
实际上,只有在您不需要解析结果时(因为HEAD响应主体为空),您才可以使用HEAD请求来验证行为。
>>> r = requests.head(url, headers=headers, timeout=3, allow_redirects=True)
>>> r.url
'..something...'
>>> r.history
[<Response [301]>]
理论上,您还可以完全阻止重定向,并检查响应状态。
>>> r = requests.get(url, headers=headers, timeout=3, allow_redirects=False)
>>> r.status_code
301
>>> r.history
[]
现在,301可能意味着重定向到firesale或其他地方 - 你不知道。
更新1
periscope.tv的一个例子(似乎OP对这样的网站有问题):
>>> example = requests.get("https://periscope.tv/couchmode", allow_redirects=True)
>>> example.status_code
200
>>> example.history
[<Response [307]>]
>>> example.history[0].url
u'https://periscope.tv/couchmode'
>>> example.url
u'https://periscope.tv/w/aZwcYHNlcnZpY2V8MURYeHl6WUFaUWdLTerSfgniRKoRgIPbfxxlbAGofYQNBd8WZZTEelJ0KavI?mode=couch'
如您所见,example.history [0] .url告诉您返回307临时重定向的URL是什么。
答案 1 :(得分:0)
这样做的一种方法是使用urllib2并覆盖HTTPRedirectHandler的redirect_request()方法。使用请求可能是一种更优雅的方式,但我不熟悉该软件包。
import urllib2
class FindRedirect(urllib2.HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, hdrs, newurl):
print('Sale has started!!')
return urllib2.HTTPRedirectHandler.redirect_request(self, req, fp, code, msg, hdrs, newurl)
opener = urllib2.build_opener(FindRedirect)
opener.open('http://googel.com')