点击此http://india.gov.in/topics/health-family-welfare/health中的每个链接时,每个链接都被重定向到另一个域,当我获取所有链接并尝试获取重定向的网址时,则出现以下错误,所以我采取了一个网址并将其放在浏览器上,它没有被重定向,我怎样才能获得重定向的网址。当我尝试使用下面的代码打印网址的状态代码时,它正在退回404 stsua但内容正在打印,这是否意味着我将无法获取thoose重定向的URL
try:
print urllib2.urlopen(link).read()
except urllib2.HTTPError, e:
print e.code
print e.msg
print e.headers
print e.fp.read()
我已尝试使用此代码获取重定向的网址,但我收到了错误
import urllib2, httplib
httplib.HTTPConnection.debuglevel = 1
request = urllib2.Request("http://www.india.gov.in/redirect=http%3A%2F%2Fmohfw.nic.in&nid=MjU3NTBuZXducGk=")
opener = urllib2.build_opener()
f = opener.open(request)
print f.url
打印:
urllib2.HTTPError: HTTP Error 404: Not Found
答案 0 :(得分:0)
页面重定向似乎需要将referer设置为页面,您可以从。
开始你的电话没有设置Referer,所以它失败了。
请注意,如果您将网址设置为剪贴板并尝试在浏览器中打开它,则会在页面上显示标题""未找到请求的网页"
使用我最喜欢的requests
,我可以重现这个问题,并且还可以显示标题" Referer"它的工作原理
>>> import requests
>>> url = "http://www.india.gov.in/redirect=http%3A%2F%2Fmohfw.nic.in&nid=MjU3NTBuZXducGk="
>>> req = requests.get(url)
>>> req
<Response [404]>
>>> req.reason
'Not Found'
现在尝试使用&#34; Referer&#34;标题设置为原始页面
>>> headers = {"Referer": "http://india.gov.in/topics/health-family-welfare/health"}
>>> req = requests.get(url, headers=headers)
>>> req
<Response [200]>
您可以使用任何http库获得相同的结果(或切换到requests
以使您的生活更轻松。)