如何在python中使用urllib2捕获重定向的URL

时间:2013-01-04 07:43:48

标签: python url redirect urllib2 httplib

我使用urllib2模块读取html页面,下面是我的代码

code.py

import urllib2, httplib

httplib.HTTPConnection.debuglevel = 1  
request = urllib2.Request("http://www.vodafone.in/Pages/tuesdayoffers_che.aspx")
opener = urllib2.build_opener()
f = opener.open(request)
print f.url

结果

'http://www.vodafone.in/pages/tuesdayoffers_che.aspx?cid=che'

当我在浏览器中给出上述网址时,它被重定向到http://www.vodafone.in/pages/home_che.aspx?cid=che,但是从上面的代码我得到了相同的给定网址

所以最后如何使用urrlib2捕获重定向的url并从中读取数据 我有一些网址将被重定向到其他网址,最后我的意图是捕获重定向的网址并从catched网址读取数据,所以如何使用urllib2 and httplib

在python中实现这一点

2 个答案:

答案 0 :(得分:2)

不需要正则表达式。该站点通过JavaScript重定向,但仍返回302状态代码。您可以通过以下方式验证:

url = 'http://www.vodafone.in/Pages/tuesdayoffers_che.aspx'
file_pointer = urllib2.urlopen(url)
print file_pointer.getcode()

当返回302状态代码时,响应标头中有一个Location标头。您可以通过以下方式查看:

url = 'http://www.vodafone.in/Pages/tuesdayoffers_che.aspx'
file_pointer = urllib2.urlopen(url)
print file_pointer.info()

记录Location网址。它将是您重定向到的页面。

答案 1 :(得分:-1)

是的,@ Sp是对的,这个网页被javascript重定向。以下是页面源。

<script>document.write("<meta http-equiv=\"refresh\" content=\"3;url=/pages/home_che.aspx\">");</script>

一种方法是使用正则表达式来提取重定向位置。比如url\=([a-z_./]*)

>>> import re
>>> p = re.compile(r'url\=([a-z_./]*)')
>>> p.findall(r'''<script>document.write("<meta http-equiv=\"refresh\"content=\"3;url=/pages/home_che.aspx\">");</script>''')
['/pages/home_che.aspx']