使用Chrome快速实现数据的抓取(四)——优点

优采云 发布时间: 2020-08-25 02:31

  使用Chrome快速实现数据的抓取(四)——优点

  些一个抓取WEB页面的数据程序比较简单,大多数语言都有相应的HTTP库,一个简单的恳求响应即可,程序发送Http恳求给Web服务器,服务器返回HTML文件。交互方法如下:

  

  在使用DevProtocol驱动Chrome抓取数据时,交互过程则如下图所示:

  

  此时Chrome在中间充当了一个代理的角色,看上去显得愈发复杂了,实际上却对于我们的蜘蛛程序大有帮助。本文就简单的总结下这些方法存在如下优点。

  获取动态生成的网页内容

  现在好多的网页内容的内容并不是一开是能够直接通过最初的Http请求直接获取到的,而是在返回的html页面中通过JS加载资源及估算动态生成的页面。采用这些方法的诱因有很多,有的是为了更好的用户体验,有的是由于开发框架,有的是为了节约带宽,也有的则单纯是为了加密页面内容,从而实现反爬虫的功能。

  不管是因为哪些缘由,它促使原本很简单的单一"请求-响应"式的交互过程显得复杂上去,传统的一次交互即可完成所有的恳求弄成了如下方式:

  

  动态加载给传统的数据采集造成了不小的障碍,但常常须要剖析页面加载过程,分析JS,并在程序中嵌入js引擎,模拟浏览器执行相应的脚本,获取最终的数据。这是一个特别费时吃力的过程,并且不容易剖析全。

  为了更方便解析这些动态网页,一些爬虫引擎开始引入了Dom解析和JS执行能力,模拟浏览器来解析并获取相关资源。但因为这一过程十分复杂,往往这种功能并不是十分健全,有不少的坑。

  现在,通过Chrome的形式就是这些解析页面的形式的集大成版本了,由于Chrome本身就是浏览器,具有健全的页面解析能力,处理上去如鱼得水。解析过程由chrome代理完成,我们只须要从chrome里获取最后解析完成的结果即可。

  有效的应对反爬虫策略

  最简单的反爬机制,就是检测HTTP恳求的Headers信息,包括User-Agent, Referer、Cookies等,根据手写的Http恳求报文头和常用的浏览器报文头的差别来反爬虫。这些避免中级爬虫十分有效,但Chrome本身就是一个标准浏览器,对于这类反爬机制天生免疫。

  另外一种反爬机制是上文所说的动态加载,基于前面的解释,这个对Chrome来说也是天生免疫的。

  当然,反爬策略还有好多,如限制IP访问次数,限制访问频度,验证码、等方法来反爬。这些其实Chrome不直接支持,但应对上去也比传统的Http恳求便捷得多的。后面文章中会相继介绍,这里就不一一展开了。

  DOM操作能力

  Chrome有建立的Dom操作能力,在Chrome DevTools控制台北能执行的操作基本都可以在程序中通过DevProtocol完成,为我们的APP添加了完美的DOM操作能力, 很多原先须要剖析HTML能够获取的数据如今可以直接通过Jquery之类的js函数完成。并且可以直接低格为JSON输出,方便了不止一点半点。

  和服务器交互更容易

  很多时侯,有的页面是须要一些交互能够获取到的,如登入。

  由于Chrome具有JS执行能力,我们可以通过一些简单的JS脚本十分容易的执行。例如,园子的登录就可以通过如下脚本实现:

  $("#input1")[0].value = "userName";

  $("#input2")[0].value = "password";

  $("#signin")[0].click();

  有的网站需要验证码来避免爬虫程序,我们甚至可以通过在chrome中自动打码的这些手动结合自动的方法快速实现数据抓取。如果要开发出支持接入打码平台或智能辨识平台的插口,也远比传统的蜘蛛程序容易的多。

  另外,Chrome也提供了十分丰富的API模拟鼠标和键盘的输入的插口,用上去十分便捷。

  开发调试便捷

  开发爬虫程序常常是一个反复调试的过程,由于我们是直接解析Chrome获取的数据,由于Chrome DevTool本身就是一个强悍的调试工具。这样大大加速了我们的开发过程。

  我们可以通过首先在Chrome中通过DevTools查看解析我们的页面,通过控制台程序验证编撰的脚本。用Chrome就可以完成大部分脚本的开发,而这一部分常常是不能复用,并且特别花时间的。这相当于我们获取了一个强悍的调试工具,可以节约不少时间。

  另外,Chrome也是后端人员特别熟悉的工具,我们也可以把脚本开发的工作交给后端人员,他们可以更高效的开发脚本,大幅提升开发效率。

  缺点

  说了这么多的优点,最后我们来说一说它的缺点,这种方法主要的缺点还是性能。

  传统的爬虫是十分轻量级的,就是一个传统的tcp的socket程序,通过异步socket的形式可以十分容易的实现成千上万的并发数的,并且只加载了须要的信息,性能十分高。

  而通过驱动chrome的形式是通过chrome获取服务器端的数据的,一来加载了不必要的图片,样式,广告等文件导致了带宽的浪费,另外也对网页进行了渲染导致了CPU的开支,虽然可以通过插件降低不必要的文件加载和headless的形式降低开支,但相对传统的恳求应答形式来说一直是一个重量级的获取方法。对于小规模的采集可能还问题不大,但若果要进行类似搜索引擎的形式的海量数据采集可能就有点吃不消了。

  参考文章:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线