同步操作将从 江夏尧/JSpider 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
title | version | date | author | NPM | Github | Gitee |
---|---|---|---|---|---|---|
JSpider |
2.0 |
2020/9/14 |
KonghaYao |
https://www.npmjs.com/package/js-spider |
https://github.com/KonghaYao/jspider |
https://gitee.com/dongzhongzhidong/jspider |
修改时间:2021/1/4
JSpider 在 1.0 时着重完成 JSpider 的基础功能的构建。 在 2.0 时,对 1.0 进行了函数的更改和一些新功能的加入。 在使用2.0的时候也遇到了一些问题,比如:
这是一个在浏览器端使用 JS 快速爬取文件的框架。我写的第一个爬虫脚本是基于 Python 的,但是学到分析 JS 脚本之后,发现完全可以由浏览器的 JS 来发送请求并获取数据。对于少量的数据来说,右键检查并写几行代码就爬取成功,比开新的 python 脚本要轻松得多。所以我写了这个 JSpider 工具类来替代那些繁琐的 JS 代码,使得我们能够在前端直接爬取或者提前测试爬虫代码,提高我们的爬虫效率。
按 ES 版本引入
若只想在文件中使用一个模块可以使用下面的方式导入。
import hook from "https://cdn.jsdelivr.net/npm/js-spider/src/Observer/hook.js"
所有的模块都放置在 src 文件夹下,而且模块名首字母大写。单个函数名为小写。
// js文件遵循 ES6 的 import 方式,所以要用下面的方式导入
import('https://cdn.jsdelivr.net/npm/js-spider/JSpider.js')
.then(res=>window.JSpider = res.default)
// ES5 可以直接在 script 标签中引入
请打开您的浏览器 开发者工具 快捷键:F12 or Ctrl+SHIFT+C
//加载js模块完成之后
let spider = new JSpider();
let urls = [
"/",
{
url: "/",
options: {
headers: {
"content-type": "text/plain; charset=utf",
},
body: JSON.stringify({ index: 100 }),
},
},
];
let result = await spider.Ajax({
urls,
options: {
headers: {
"Content-Type": "application/json",
},
method: "post",
},
type: "start",
});
//请求完成之后就会在 result 中有结果
完成下面的阅读,我们可以入门 JSpider 的基本爬取功能。
完成下面的阅读,我们可以使用一些额外的功能(非主要)。
完成下面的高级阅读,我们可以方便地提高分析网页方面的速度。
JSpider 高级函数集是通过 Extend 函数导入的。高级函数集中包含了便捷的工具,是 JSpider 的基础模块的联合,目的是为了帮助使用者快速开始爬虫。
导入的函数放置在 JSpider 实例中。
let spider = new JSpider();
spider.Extend();
展开后可以在 window 中直接使用 JSpider 的函数。
Object.assign(window,JSpider.prototype);
1.0.0 系列的 JSpider 的代码并没有实现完全的模块化开发,使得每个文件很庞大,很难进行查看和更新,所以 2.0.0 系列开始全面使用 ES6 的 import 实现模块化。
1.0.0 版本掺杂了数据的存储功能(parseResult 等),所以导致 JSpider 中变量过于复杂,想要取这些变量的时候的单词长度又很长。所以 2.0.0 剔除了数据的存储功能,改为直接由函数返回结果,所以需要使用变量来存储。
同时,由于使用了异步处理,除了 Downloader 不能控制下载过程外,几乎都可以使用异步进行统一操作。
由于 1.0.0 的函数其实是多种函数和基础函数杂糅在一起,所以在 2.0.0 中将 高级函数 用 基础函数 实现,便于使用者使用。
推荐在教程网页导入 JSpider 然后跟着教程学。
方式一:
直接打开开发者工具,在 console 面板,输入 import("https://cdn.jsdelivr.net/npm/js-spider/JSpider.js")
,然后运行即可导入。
方式二:
遇到 CSP 阻止引入外部的文件。
使用浏览器复制 https://cdn.jsdelivr.net/npm/js-spider/dist/JSpider.es5.js
的文件,然后在 console 上粘贴执行即可导入。
在根目录下的 JS 文件是 JSpider 的入口文件, 入口文件通过 import 引入各个部分的模块文件, 你可以看到所有的模块放置在 src 文件夹下, 如果模块较大,可以在同名的文件夹下找到分模块。
基本上所有的模块都可以脱离 JSpider 使用, 引入方式为 使用 JsDeliver 提供的 API 和 ES6 的 import 来导入你的浏览器。
在根文件夹中有一个 index.bat 双击运行即可在项目的dist 文件夹中获取创建的 es5 版本。 也可以直接从下面的连接获取。 ES5 版本直接将使用的外部库直接添加到源代码末尾,所以文件较大。
ES5 版本使用 webpack 将 JSpider 源代码降级为 ES5 版本并将 使用过的依赖的库并入 ES5 版本中, 使得直接导入时包括了依赖,但是这个文件的大小比原来要大很多。
跨域问题可以通过谷歌插件,使用转接服务器等手段解决,只凭借 浏览器端 Javascript 无法解决。
这个 CSP 协议是为了防止文件的非正常途经载入而使用的。所以,通过 script 标签和 import 引入不了文件,但是fetch 和 XHR 都是可以请求到文件的,但是然后以 Blob 数据接收并转化为字符串,使用 eval 注入脚本,可以绕过 CSP 协议。
使用开发者工具中的 snippets 保存 ES5 版本的JSpider源代码 或者直接在浏览器打开 es5 版本源代码 ,然后复制运行即可。
在形成 es5 文件时,直接将下面的项目中的 JS 源文件拼接到 JSpider.es5.js 中,方便开发者在特殊环境下直接使用。
JSZip: 一个前端压缩数据的库。
fast-xml-parser: XML => JSON 的库。
turndown:将 HTML 文本转换为 Markdown 文本的插件
3.0 计划的重点是在 Typescript 改写代码,使得代码可以编译成 浏览器版本和 Nodejs 版本。 在请求的时候加入即时存储功能,可以保存爬取的数据情况,方便开发者保存进度。
4.0 计划的宏图是建立一个以 Nodejs服务器 为中心的分布式浏览器爬取工具,也就是说,你可以和小伙伴们愉快地爬取数据了。
MIT licensed
Copyright (C) KonghaYao
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。