1 Star 0 Fork 20

Admin / JSpider

forked from 江夏尧 / JSpider 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT
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

:book: JSpider 2.0.0+ Beta

Version MIT Javascript platform star fork

修改时间:2021/1/4

关于项目的计划

JSpider 在 1.0 时着重完成 JSpider 的基础功能的构建。 在 2.0 时,对 1.0 进行了函数的更改和一些新功能的加入。 在使用2.0的时候也遇到了一些问题,比如:

  • 如何快速地将数据转变为 Excel 能够打开的数据(这是因为数据处理的时候这个格式比较好用)
  • 如何在网页关闭后仍然能够保存我的进度和数据?(使用前端存储)
  • 既然 JSpider 基于 JS ,我想在 Nodejs 上使用它!(我用TS改写了代码) 这些都会列入我的 3.0 计划中。(3.0计划详细查看文档末尾)

:pencil2: 介绍

这是一个在浏览器端使用 JS 快速爬取文件的框架。我写的第一个爬虫脚本是基于 Python 的,但是学到分析 JS 脚本之后,发现完全可以由浏览器的 JS 来发送请求并获取数据。对于少量的数据来说,右键检查并写几行代码就爬取成功,比开新的 python 脚本要轻松得多。所以我写了这个 JSpider 工具类来替代那些繁琐的 JS 代码,使得我们能够在前端直接爬取或者提前测试爬虫代码,提高我们的爬虫效率。

这个网页已经载入了JSpider,可以使用开发者工具打开,观看例子的时候可以试着做一做。
:bangbang: 注意: 2.0.0 + 版本语法与 1.0.0 + 版本语法不同。

:closed_book: 版本情况


:hammer: 快速开始

JsDelivr cdn 载入链接解析

按 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 标签中引入

:airplane: 快速爬取

请打开您的浏览器 开发者工具 快捷键: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 中有结果

:gear: 推荐阅读顺序

完成下面的阅读,我们可以入门 JSpider 的基本爬取功能。

Ajax 模块

Parser 模块

Downloader 模块

完成下面的阅读,我们可以使用一些额外的功能(非主要)。

Script 函数

Copy 模块

Cookies 对象

完成下面的高级阅读,我们可以方便地提高分析网页方面的速度。

Search 模块

Observer 模块


:bee: 高级函数集

JSpider 高级函数集是通过 Extend 函数导入的。高级函数集中包含了便捷的工具,是 JSpider 的基础模块的联合,目的是为了帮助使用者快速开始爬虫。

导入的函数放置在 JSpider 实例中。

let spider = new JSpider();
spider.Extend();

:candy: 展开 JSpider 到 window 对象

展开后可以在 window 中直接使用 JSpider 的函数。

Object.assign(window,JSpider.prototype);

:dart: 与 1.0.0 版本的不同

全面模块化

1.0.0 系列的 JSpider 的代码并没有实现完全的模块化开发,使得每个文件很庞大,很难进行查看和更新,所以 2.0.0 系列开始全面使用 ES6 的 import 实现模块化。

单纯地处理数据

1.0.0 版本掺杂了数据的存储功能(parseResult 等),所以导致 JSpider 中变量过于复杂,想要取这些变量的时候的单词长度又很长。所以 2.0.0 剔除了数据的存储功能,改为直接由函数返回结果,所以需要使用变量来存储。

同时,由于使用了异步处理,除了 Downloader 不能控制下载过程外,几乎都可以使用异步进行统一操作。

使用高阶函数进行爬取

由于 1.0.0 的函数其实是多种函数和基础函数杂糅在一起,所以在 2.0.0 中将 高级函数基础函数 实现,便于使用者使用。



:rainbow: 开发者使用说明

如何测试 JSpider

推荐在教程网页导入 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 文件夹下, 如果模块较大,可以在同名的文件夹下找到分模块。

单独载入 js 模块文件

基本上所有的模块都可以脱离 JSpider 使用, 引入方式为 使用 JsDeliver 提供的 API 和 ES6 的 import 来导入你的浏览器。

浏览器不支持 ES6 但支持 ES5

在根文件夹中有一个 index.bat 双击运行即可在项目的dist 文件夹中获取创建的 es5 版本。 也可以直接从下面的连接获取。 ES5 版本直接将使用的外部库直接添加到源代码末尾,所以文件较大。

ES5 版本与普通版本的区别

ES5 版本使用 webpack 将 JSpider 源代码降级为 ES5 版本并将 使用过的依赖的库并入 ES5 版本中, 使得直接导入时包括了依赖,但是这个文件的大小比原来要大很多。

跨域问题

跨域问题可以通过谷歌插件,使用转接服务器等手段解决,只凭借 浏览器端 Javascript 无法解决。

绕过 CSP 协议 加载 JSpider

这个 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 计划

3.0 计划的重点是在 Typescript 改写代码,使得代码可以编译成 浏览器版本和 Nodejs 版本。 在请求的时候加入即时存储功能,可以保存爬取的数据情况,方便开发者保存进度。

  • 使用 Typescript 改写代码。(虽然我的Typescript更菜,但是可以编译成各种版本)
  • 重新修改所有的代码,部分函数发生更改。
  • 使用浏览器的 indexDB 存储数据。(计划是使用 ZangoDB 这个处理 indexDB 的库)
  • 数据直接转化为 Excel 能够打开的数据(计划使用 sheetjs 进行处理)

4.0宏图

4.0 计划的宏图是建立一个以 Nodejs服务器 为中心的分布式浏览器爬取工具,也就是说,你可以和小伙伴们愉快地爬取数据了。

License

MIT licensed

Copyright (C) KonghaYao

MIT License Copyright (c) 2020 动中之动 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

在浏览器端使用 JS 快速爬取文件的框架 展开 收起
JavaScript
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
JavaScript
1
https://gitee.com/isni_admin/jspider.git
git@gitee.com:isni_admin/jspider.git
isni_admin
jspider
JSpider
master

搜索帮助

344bd9b3 5694891 D2dac590 5694891