js 爬虫抓取网页数据(搜索引擎爬取网页被重定向的情况是什么?如何处理)

优采云 发布时间: 2021-11-13 07:01

  js 爬虫抓取网页数据(搜索引擎爬取网页被重定向的情况是什么?如何处理)

  作者写的搜索引擎爬虫在爬取页面时遇到了网页被重定向的情况。所谓重定向就是通过各种方法(本文提到的三种)(URL)将各种网络请求重定向到其他位置。每个网站首页都是网站资源的入口。当重定向发生在网站的首页时,如果处理不当,很可能会遗漏网站的全部内容。

  作者写的爬虫在爬取网页时遇到了三种重定向情况。

  1.服务器端重定向是在服务器端完成的。一般来说爬虫是可以自适应的,不需要特殊处理,比如响应码301(永久重定向)、302(临时重定向)等,具体可以通过响应中的url和status_code这两个属性来判断requests 请求获取的对象。当status_code为301、302或其他代表重定向的代码时,表示原请求被重定向;当响应对象的 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 "https://jigsaw.w3.org/HTTP/300/301.html"

fetch(response.headers['Location'])

  2.meta refresh,即网页中的标签声明了网页重定向的链接。这个重定向由浏览器完成,需要通过编写代码来处理。比如下面HTML代码第三行的注释中如果出现某个重定向,浏览器可以自动跳转,但是爬虫只能获取跳转前的页面,不能自动跳转。

  解决方法是通过获取跳转前的页面源代码来提取重定向url信息(上面代码第三行的url属性值)。具体操作:

  ①使用xpath('//meta[@http-equiv="refresh" and @content]/@content')提取content的值

  ②使用正则表达式提取重定向的url值。

  3.js 重定向,重定向是以 JavaScript 代码的形式进行的。比如下面的JavaScript代码

  window.location.href='http://www.redirectedtoxxx.com'

  网页收录内容的情况是最容易解决的。一般来说,它基本上是静态网页的硬编码内容,或者是动态网页,使用模板渲染。当浏览器获取到 HTML 时,它已经收录了所有的关键信息,所以你在网页上直接看到的内容可以通过特定的 HTML 标签加载 javascript 代码。这种情况是因为虽然网页显示时内容在HTML标签中,但实际上是通过执行js代码添加到标签中的。所以此时的内容在js代码中,js的执行是浏览器端的操作,所以当你使用程序请求网页地址时,得到的响应就是网页代码和js代码,这样就可以在浏览器端看到内容了,因为解析时没有执行js,所以指定的HTML标签下的内容必须为空。这个时候的处理方法一般是找到收录内容的js代码字符串,然后通过正则表达式获取对应的内容,而不是解析HTML标签。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线