nodejs抓取动态网页(使用ScrapySharp快速从网页中采集数据中的采集方案介绍)

优采云 发布时间: 2022-02-05 01:21

  nodejs抓取动态网页(使用ScrapySharp快速从网页中采集数据中的采集方案介绍)

  在上一篇文章文章中,我介绍了使用ScrapySharp快速采集从网页中获取数据。该方法是通过直接发送的Http请求获取原创页面信息。对于静态网页非常有效,但是网站中也有很多页面内容并不是全部存储在原创页面中的,而且很多内容是通过javascript动态生成的,而这些数据是前面无法抓取的方法。本文简单介绍了动态网页的采集方案。

  对于这样的网页数据采集,往往会使用浏览器引擎来加载整个页面,加载后输出完整的页面,然后使用ScrapySharp等工具进行解析。常用的方法有以下几种:

  使用 WebBrowser 控件

  这种方法被认为已被大多数 .Net 开发人员使用。由于WebBrowser直接使用与操作系统集成的IE,无需下载第三方控件,比较简单快捷。但是,它只是一个演示控件,并没有提供很多接口。集成一些扩展比较麻烦。

  使用网络浏览器

  PhantomJS 是一个带有 Webkit 核心的无界面浏览器。它的一个特点就是可以很方便的集成javascript脚本,所以开发扩展更加方便,也可以用在服务器端无法使用UI控件的地方。目前网上的大部分解决方案都是这种。把我看过的几篇文章抄录到这里文章,就不做详细介绍了:

  这个程序本身是比较方便和强大的,但是在试用过程中还是存在一些问题,比如有些网页不是很规范,不能正确解析,或者有乱码。

  使用 CEF 控件

  CEF 是 Chromium Embedded Framework,谷歌提供的 Chrome 集成解决方案。相对而言,它提供了更底层的API,我们可以进行更强大的自定义(当然也需要更多的工作)。加快内容解析。

  直接解析Javascript模拟渲染

  上述方案虽然可以简单正确地获取完整的解析页面,但存在一个性能问题:速度很慢。虽然浏览器是由顶级专家开发的,但页面本身的渲染是一个非常复杂的过程。使用上述工具完全渲染一个页面仍然需要几秒钟,而且资源开销不小,无法支持*敏*感*词*数据。采集。

  在大多数情况下,这不是什么大问题,但是如果你更关注性能问题,有一个比较原创的方法来解决它,那就是分析网页的JS的工作原理,并模拟浏览器只执行与内容相关的 JS。手动获取输出的内容。

  这样主要是需要一个javascript引擎,已经提供了大量的js引擎,基本没有问题。它的主要问题在于需要对网页进行自定义和分析,而这些网页的大部分JS都采用了一定的混淆策略,不易分析,而且往往需要大量的时间去调试。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线