我使用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
答案 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']