想爬这个页面https://www. shanghairanking.cn/institution ,F12抓包后发现是访问api异步加载的,但是直接访问api/v2010/inst 的返回码是401,已经把cookie、authorization那些参数都复制了,但是还是不能访问成功,有懂的吗?
网上也没查到解决方法,都是爬排名的教程,没看到爬这个页面的
401错误说明访问被拒绝,可能是因为缺少某些必要的参数或者登录状态失效。我建议你尝试以下几个步骤:
我建议你先检查一下自己携带的cookie和authorization参数是否正确,是否有缺漏。如果确信携带的参数没有问题,那么我建议你尝试下面这种方法来处理401错误:
具体步骤如下:
import requests
url = 'https://www.shanghairanking.cn/institution'
response = requests.get(url)
auth_token = response.headers['authorization']
import requests
url = 'https://www.shanghairanking.cn/api/v2010/inst'
headers = {
'authorization': 'Bearer {0}'.format(auth_token),
'Content-Type': 'application/json'
}
params = {
'type': 'ARWU',
'category': '',
'location': '',
'uncertainty': '',
'subjects': '',
'index': 'all',
'order': 'asc',
'orderby': '',
'search': '',
'year': [],
'url': '/institution/3022.html'
}
response = requests.post(url, headers=headers, json=params)
总结:401错误代表身份验证失败,发生在请求未携带或者错误携带证书的情况下。以上方法先使用获取authorization token的方式避免了401错误,之后再使用获取的token携带其他必要参数来发送请求,即可成功获取数据。
爬取不成功,说明网站拒绝你的请求,也就是说网站有反爬机制,这个时候需要更改你的ip地址来进行访问网站,你可以搜一搜关于python使用一个虚拟地址访问网站相关内容