首页 行业资讯 宠物日常 宠物养护 宠物健康 宠物故事

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

发布网友 发布时间:2022-04-22 08:08

我来回答

2个回答

懂视网 时间:2022-05-10 07:16

搜索引擎爬虫在爬取页面时会遇到网页被重定向的情况,所谓重定向(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 获取重定向页面

scrapy shell -s ROBOTSTXT_OBEY=False --no-redirect " 
fetch(response.headers['Location'])

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>

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

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

热心网友 时间:2022-05-10 04:24

看下网络爬虫的百度百科,在抓取网页的过程中,直到满足系统的一定
停止条件,这个你懂的,并重复上述过程,不断从当前页面上抽取新的URL放入队列.request模拟构建一个带cookies的浏览器。!

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com