用纯客户端 JavaScript 来写一个的爬虫

8,052 阅读3分钟
原文链接: zhuanlan.zhihu.com

拿JavaScript写爬虫,听起来貌似有些不靠谱?

爬虫,大多人对于爬虫的理解都停留在使用后端语言如Python写的爬虫。但是实际上,使用客户端JavaScript有诸多后端爬虫所无法拥有的优势:

  • 可以方便的分享给其他人用,只要对方电脑里有浏览器

  • 由于跑在客户端,几乎可以无视对方网站的反爬虫机制

  • 可以拥有完善的UI,无开发基础的小白也可以随意使用

这东西应该怎么启动?

而“客户端JavaScript爬虫如何运行”问题,回答这个问题非常简单,大致有3种运行JavaScript的代码:

  • 存浏览器书签,以javascript:打头,点击即可运行

  • 复制到浏览器console中按回车

  • 有个浏览器扩展叫做“油猴子”

这里我们主要看下第三种,油猴脚本方式运行。

或许你听说过油猴扩展,他在Firefox叫做Greasemonkey在Chrome叫做Tampermonkey,你可以轻松的在浏览器的扩展商店找到它。而关于其本身有何作用,一句话

按照规则,在不同的URL额外运行一段JavaScript代码

请参考下面的例子:

// ==UserScript==
// @name          Pxer
// @include       http://www.pixiv.net*
// ==/UserScript==
javascript:void((function() {
    
    document.documentElement.appendChild(
        document.createElement('script')
    ).src='http://pxer-app.pea3nut.org/jsonp.js?'+(+new Date);

})());

==UserScript==是油猴脚本的规则,上面的规则告诉油猴:

当浏览器打开www.pixiv.net*的页面时,执行下面的脚本

而脚本的内容则是:通过jsonp的方式向页面引入一个js文件。

这就可以做很多事了。(不是坏事哦~)

优势,还是非常多的

上图是一个二次元插画交流站pixiv.net。图中显示“Pxer 7”的那一个长条是原本不存在与原网站中的,而是通过油猴脚本自动载入JavaScript脚本来创建的。

若想访问图中的原始链接可以点击这里,可能你需要先在pixiv.net注册一个账号

通过油猴脚本自动载入,你可以做到:

完全不影响原网站使用的情况下,利用强大的JavaScript向用户提供额外的功能

再结合一开始提到的优点:

  • 可以给任何人使用!哪怕是无开发基础的小白

  • 不会被封杀!由真实用户操作,封账号、IP、验证码等反爬虫策略你觉得会对客户端爬虫有效吗?

  • 利用HTML+CSS,构建一个漂亮的UI完美融入原网站,简直不能再简单~

突然莫名的感觉很无敌有木有?

说了这么多,来个实际实现的例子

空说无凭,来看一个实际的客户端JavaScript爬虫开源项目 —— Pxer

Pxer是一个纯客户端JavaScript编写的爬虫,无需任何配置即可直接在浏览器端运行。

Pxer最大作用是将pixiv.net网站(类似于花瓣网)中的图片作品快速的抓取下来。它不是简单的检索img标签,而是通过一定的算法和Ajax请求来完成更为复杂的功能。

关于项目的详细描述,可以参考项目官网Github项目主页

良好的jsDOC格式注释和详细的文档都已经为你准备好了~~