python爬虫解决网页重定向问题
2016-12-12 22:04
531 查看
笔者使用python2.7+requests编写爬虫,以下问题针对此情况讨论。
笔者编写的搜索引擎爬虫在爬取页面时遇到了网页被重定向的情况,所谓重定向(Redirect)就是通过各种方法(本文提到的为3种)将各种网络请求重新转到其它位置(URL)。每个网站主页是网站资源的入口,当重定向发生在网站主页时,如果不能正确处理就很有可能会错失这整个网站的内容。
笔者编写的爬虫在爬取网页时遇到了三种重定向的情况。
1.服务器端重定向,在服务器端完成,一般来说爬虫可以自适应,是不需要特别处理的,如响应代码301(永久重定向)、302(暂时重定向)等。具体来说,可以通过requests请求得到的response对象中的url、status_code两个属性来判断。当status_code为301、302或其他代表重定向的代码时,表示原请求被重定向;当response对象的url属性与发送请求时的链接不一致时,也说明了原请求被重定向且已经自动处理。
2.meta refresh,即网页中的<meta>标签声明了网页重定向的链接,这种重定向由浏览器完成,需要编写代码进行处理。例如,某一重定向如下面的html代码第三行中的注释所示,浏览器能够自动跳转,但爬虫只能得到跳转前的页面,不能自动跳转。
3.js 重定向,通过JavaScript代码形式进行重定向。如下面JavaScript代码
笔者编写的搜索引擎爬虫在爬取页面时遇到了网页被重定向的情况,所谓重定向(Redirect)就是通过各种方法(本文提到的为3种)将各种网络请求重新转到其它位置(URL)。每个网站主页是网站资源的入口,当重定向发生在网站主页时,如果不能正确处理就很有可能会错失这整个网站的内容。
笔者编写的爬虫在爬取网页时遇到了三种重定向的情况。
1.服务器端重定向,在服务器端完成,一般来说爬虫可以自适应,是不需要特别处理的,如响应代码301(永久重定向)、302(暂时重定向)等。具体来说,可以通过requests请求得到的response对象中的url、status_code两个属性来判断。当status_code为301、302或其他代表重定向的代码时,表示原请求被重定向;当response对象的url属性与发送请求时的链接不一致时,也说明了原请求被重定向且已经自动处理。
2.meta refresh,即网页中的<meta>标签声明了网页重定向的链接,这种重定向由浏览器完成,需要编写代码进行处理。例如,某一重定向如下面的html代码第三行中的注释所示,浏览器能够自动跳转,但爬虫只能得到跳转前的页面,不能自动跳转。
<html> <head> <meta http-equiv="refresh" content="0.1;url=http://www.redirectedtoxxx.com/"><!--本网页会在0.1秒内refresh为url所指的网页--> </head> </html>解决办法是通过得到跳转前的页面源码,从中提取出重定向url信息(上述代码第三行中的url属性值)。一个具体的操作:①使用xpath('//meta[@http-equiv="refresh" and @content]/@content')提取出content的值 ②使用正则表达式提取出重定向的url值。
3.js 重定向,通过JavaScript代码形式进行重定向。如下面JavaScript代码
<script language=javascript>window.location.href='http://www.redirectedtoxxx.com'</script>对于这种方式的跳转,由于可以实现该功能的JavaScript语句有多种形式,不能再使用正则表达式提取url,只能考虑加载JavaScript代码来进行解决。
相关文章推荐
- python爬虫解决网页重定向问题
- Python 网络爬虫 006 (编程) 解决下载(或叫:爬取)到的网页乱码问题
- python爬虫中文网页cmd打印出错问题解决
- python3.6+selenium+phantomJS 网页爬虫报错NoSuchElementException问题及解决方法
- Python爬虫,用第三方库解决下载网页中文本的问题
- Python 网络爬虫 006 (编程) 解决下载(或叫:爬取)到的网页乱码问题
- 爬虫解决网页重定向问题
- 解决Python网页爬虫之中文乱码问题
- python第一个爬虫小程序以及遇到问题解决(中文乱码)+批量爬取网页并保存至本地
- 解决网页重定向带来的无法返回的问题
- URLConnection实现爬虫(解决重定向、设置cookie才能抓取页面等问题)
- python 网页抓取中的中文乱码问题解决
- 网页包含重定向的问题解决
- Python学习笔记:学习爬虫时遇到的问题TypeError: cannot use a string pattern on a bytes-like object 与解决办法
- python爬虫请求网页时遇到问题
- 爬虫 解决网页ip限制的问题的八种方法
- python3写爬虫程序时,遇到的问题及解决方法
- python爬虫解决百度贴吧登陆验证码问题
- python爬虫,selenium使用,Firefox-chrome-IE问题解决方法,selenium的基本操作
- python 爬虫时遇到问题及解决