python爬虫重定向_爬虫基础之http重定向
http重定向分为两种:301 ,所请求的URL已经被移除,响应头的Location首部包含了所访问资源当前所用的URL
302 ,与301形式相同,区别在于,301用于资源永久移除的情况,而302用于临时移除的情况
在编写爬虫时,要正确处理重定向。我们在百度搜索数据时,百度给出的资源链接就是需要做302重定向的连接,比如下面的连接
这是通过关键词 python 教程 搜索到的一个连接地址,将这个地址输入到浏览器中,最终显示的页面的地址是
https://www.runoob.com/python/python-tutorial.html
这个过程中,就发生了302重定向,浏览器会自动处理重定向,因此,作为使用者,我们并不了解中间的过程,但我们可以通过代码来探索其中的奥秘
import requests
res = requests.get(url, allow_redirects=False)
print(res.status_code)
print(res.headers)
在发送get请求时,一定要设置allow_redirects 为False,否则,requests库会像浏览器一样自动帮我们做重定向。程序输出结果为
302
{'Bdpagetype': '3', 'Cache-Control': 'no-cache, must-revalidate',
'Connection': 'keep-alive', 'Content-Length': '154',
'Content-Type': 'text/html;charset=utf8', 'Date': 'Thu, 27 Feb 2020 06:25:31 GMT',
'Expires': 'Fri, 01 Jan 1990 00:00:00 GMT',
'Location': 'https://www.runoob.com/python/python-tutorial.html',
'P3p': 'CP=" OTI DSP COR IVA OUR IND COM "', 'Pragma': 'no-cache',
'Server': 'BWS/1.1', 'Set-Cookie': 'BAIDUID=8B51B75CDDA6BA18AB8B46E21B7A3D1D:FG=1;
max-age=31536000; expires=Fri, 26-Feb-21 06:25:31 GMT; domain=.baidu.com; path=/; version=1;
comment=bd, BDSVRTM=0; path=/', 'Traceid': '158278473105658444908850796187394806037',
'X-Ua-Compatible': 'IE=Edge,chrome=1', 'X-Xss-Protection': '1;mode=block'}
响应状态码是302, 在响应的首部中有一个Location字段,浏览器就是通过这个字段里的内容再次发起请求,我们在写爬虫的过程中,如果想要获取真实的url地址,就需要处理这种重定向问题。
