python爬虫爬网页时遇到网页重定向怎么办

互联网 19-6-28

搜索引擎爬虫在爬取页面时会遇到网页被重定向的情况,所谓重定向(Redirect)就是通过各种方法(本文提到的为3种)将各种网络请求重新转到其它位置(URL)。每个网站主页是网站资源的入口,当重定向发生在网站主页时,如果不能正确处理就很有可能会错失这整个网站的内容。

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

#请求重定向#方法一response.setStatus(302);response.setHeader("location","/day06/index.jsp");#方法二response.sendRedirect("/day06/index.jsp");

scrapy shell 获取重定向页面

scrapyshell-sROBOTSTXT_OBEY=False--no-redirect"fetch(response.headers['Location'])

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

<html><head><metahttp-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代码

<scriptlanguage=javascript>window.location.href='http://www.redirectedtoxxx.com'</script>

网页包含内容这种情况是最容易解决的,一般来讲基本上是静态网页已经写死的内容,或者动态网页,采用模板渲染,浏览器获取到HTML的时候已经是包含所有的关键信息,所以直接在网页上看到的内容都可以通过特定的HTML标签得到javascript代码加载内容,这种情况是由于虽然网页显示时,内容在HTML标签里面,但是其实是由于执行js代码加到标签里面的,所以这个时候内容在js代码里面的,而js的执行是在浏览器端的操作,所以用程序去请求网页地址的时候,得到的response是网页代码和js的代码,所以自己在浏览器端能看到内容,解析时由于js未执行,肯定找到指定HTML标签下内容肯定为空,这个时候的处理办法,一般来讲主要是要找到包含内容的js代码串,然后通过正则表达式获得相应的内容,而不是解析HTML标签。

更多Python相关技术文章,请访问Python教程栏目进行学习!

以上就是python爬虫爬网页时遇到网页重定向怎么办的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:python怎么查看logging

相关资讯