博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python爬虫解决网页重定向问题
阅读量:5733 次
发布时间:2019-06-18

本文共 875 字,大约阅读时间需要 2 分钟。

笔者编写的搜索引擎爬虫在爬取页面时遇到了网页被重定向的情况,所谓重定向(Redirect)就是通过各种方法

(本文提到的为3种)将各种网络请求重新转到其它位置(URL)。
每个网站主页是网站资源的入口,当重定向发生在网站主页时,如果不能正确处理就很有可能会错失这整个网站的内容。

以下列出遇到的3种重定向情况(使用python2.7+requests编写爬虫):


1.服务器端重定向

在服务器端完成,一般来说爬虫可以自适应,是不需要特别处理的,如响应代码301(永久重定向)、302(暂时重定向)等。具体来说,可以通过requests请求得到的response对象中的url、status_code两个属性来判断。当status_code为301、302或其他代表重定向的代码时,表示原请求被重定向;当response对象的url属性与发送请求时的链接不一致时,也说明了原请求被重定向且已经自动处理。

2.meta refresh

即网页中的<meta>标签声明了网页重定向的链接,这种重定向由浏览器完成,需要编写代码进行处理。例如,某一重定向如下面的html代码第三行中的注释所示,浏览器能够自动跳转,但爬虫只能得到跳转前的页面,不能自动跳转。

解决办法是通过得到跳转前的页面源码,从中提取出重定向url信息(上述代码第三行中的url属性值)。

具体的操作:使用xpath('//meta[@http-equiv="refresh" and @content]/@content')提取出content的值 或者使用正则表达式提取出重定向的url值。

3.js 重定向

通过JavaScript代码形式进行重定向。如下面JavaScript代码

对于这种方式的跳转,由于可以实现该功能的JavaScript语句有多种形式,不能再使用正则表达式提取url,只能考虑加载JavaScript代码来进行解决,例如使用selenium 无头浏览器phantomJS 模拟浏览器操作

关于phantomJS的一些简单操作语法可以在我这篇中看下

转载地址:http://vumwx.baihongyu.com/

你可能感兴趣的文章
如何正确做 Web端压力测试?
查看>>
LibSVM-windows
查看>>
华为内部面试题库---(3)
查看>>
消息耦合还是接口耦合
查看>>
C#窗体淡入淡出
查看>>
Hadoop(七)HDFS容错机制详解
查看>>
F# 入门(五):F# 代码结构及编译顺序
查看>>
Visual F# 3.0 Beta 介绍
查看>>
C++STL中的list链表
查看>>
使用vbscript替换excel文件的内容
查看>>
资源管理器
查看>>
集合框架
查看>>
Error creating bean with name 'signController': Injection of autowired dependencies failed
查看>>
Sublime执行python文件
查看>>
【规划】近期的规划
查看>>
MYSQL 为表指定文件位置 data directory
查看>>
SQL Server 触发器的修改与删除
查看>>
浅谈Java中的hashcode方法
查看>>
Microsoft Azure 上的自定义数据和 Cloud-Init
查看>>
Node.js 体验-存储服务和服务运行时
查看>>