检测python中的URL更改

时间:2016-02-22 07:27:52

标签: python python-2.7 python-requests

当商店开火时,我需要检测网址更改,我使用请求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

2 个答案:

答案 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')