搜索引擎爬虫在爬取页面时会碰到网页被重定向的状况,所谓重定向(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教程栏目举行进修!
以上就是python爬虫爬网页时碰到网页重定向怎么办的细致内容,更多请关注ki4网别的相干文章!