1 Star 0 Fork 20

CharlesSong / JSpider

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

:book: JSpider

Version MIT Javascript platform star fork

:book: 完整教程

:o: 因为版本情况不一,请使用最新版!完整教程已经更新!

:pencil2: 介绍

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

:bangbang: 注意

这个项目依赖 ES6 import 语法,所以某些浏览器可能不支持。 使用这个爬虫脚本时,需要使用者能够使用 async,await ,Promise,import 等较新的语法。


:pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray:


:airplane: 快速开始

JsDelivr cdn 载入

链接解析

https://cdn.jsdelivr.net/npm/js-spider/JSpider-pro.js

https://cdn.jsdelivr.net/npm/js-spider/JSpider- 类型 .js

// js文件遵循 ES6 的 import 方式,所以要用下面的方式导入
//动态载入
import('https://cdn.jsdelivr.net/npm/js-spider/JSpider-core.js').then(res=>window.JSpider = res.default)

:hammer: 快速爬取

//加载js模块完成之后
let spider = new JSpider()
//然后就可以使用各种函数了
spider.ajax({
  urls:[
    //数组内可以是url字符串或者是下面的对象
    'https://cdn.jsdelivr.net/npm/js-spider/JSpider-pro.js',
    {
      url:'https://cdn.jsdelivr.net/npm/js-spider/JSpider-core.js',
      options:(opt)=>{
        //这里可以修改原来的options
        return opt
      }
    }
    ],
  options:{
    method:'GET'
  },//默认的options
  limits = 3, 
  time = 200, 
  type = "sync"//可以填 sync async time
})
//请求完成之后就会在 spider.result 中有结果

:candy: 引入额外的模块

let spider =new JSpider()
spider.extend('Search')
spider.extend(['Hook','Cookies'])

:book: 完整教程


:pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray:


:gear: 软件架构

JSpider 分为

  • 请求模块
    • Ajax
  • 解析模块
    • HTML文本解析模块
      • HTMLParser
    • XML文本解析模块
      • XMLParser
  • 批量下载模块
    • Downloader
  • 分析模块
    • Observer 模块
      • Hook
      • Observer
    • Search 模块
      • searchWindow
      • searchObj
      • Globals
  • 扩展模块
    • extend
    • Script
  • 专用模块
    • m3u3Downloader
    • Copy
    • Cookies

:pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray:


:dart: 各个模块解析

如何导入

各个模块可以通过 extend(['Ajax','Hook']) 来导入。 若只想在文件中使用一个模块可以

import Hook from "https://cdn.jsdelivr.net/npm/js-spider/lib/Observer/hook.js"

所有的模块都放置在 lib 文件夹下,而且模块名首字母大写。

Ajax 模块

Ajax 模块包含批量网络请求的基础函数,能够进行批量的网络请求。

HTMLParser 和 XMLParser

对于 HTML ,XML 文本的解析函数。

Downloader 模块

用于下载文件,可以下载文本和 Blob 数据。

Hook 模块

Hook 模块用于控制函数,当函数被触发时会先执行我们的函数。

Search 模块

这个模块包含了三个函数,能够对 window 对象进行全面的搜索。

Script 模块

通过 URL 导入其他的 JS 或 CSS 文件。

Cookies 模块

这个模块用于处理 cookie 字符串。

Observer 模块

这个模块通过代理函数和对象来实现监控操作。


:dove: 鸽子工程 :dove: :dove: :dove: :dove: :dove:

下面的类型为包含关系 例如:后面的类型包含前面的类型的内容

  • 表示已经实现 功能可以通过extend函数引入

:heavy_check_mark: 表示使用正常

:alembic: 表示实验性函数


:star: JSpider-core.js 核心类型

  • :heavy_check_mark: 并发请求 (已经将队列请求包括了)

  • :heavy_check_mark: 定时请求

  • :heavy_check_mark: 批量下载并使用zip打包(JSZip)

  • :heavy_check_mark: 当爬取到数据之后将 HTML 文本解析

  • :heavy_check_mark: 可以载入外部的css或js文件


:star:​ JSpider-nor.js 常用类型

  • :heavy_check_mark: XML解析: XML (String) ==> Object

  • :heavy_check_mark: Search模块: 用正则表达式搜索对象内容

  • :heavy_check_mark: Cookies 函数


:star: JSpider-pro.js 强化类型

  • :heavy_check_mark: hook 函数: 用于代理函数

  • :alembic: Watch 函数: 对象监听函数


:star: Extentions 扩展函数

这些模块将不会被上面的类型包含,但是可以通过 extend 导入。

  • :alembic: Copy : 与剪贴板有关的函数

:pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray: :pray:


:rainbow: 开发者使用说明

如何测试 JSpider

这个项目中的 test.html 打开,然后进控制台就已经导入了 JSpider 了,默认是 pro 类型。

如何找到模块的源文件

在根目录下的 JS 文件是 JSpider 的入口文件, 所有的模块放置在 lib 文件夹下, 如果模块较大,可以在同名的文件夹下找到分模块。

单独载入 js 模块文件

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

如何支持 ES5 ?

可以使用 webpack 打包 JSpider 文件,然后再引入就可以了。

  • 提供打包后文件。

跨域问题 CORS

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

绕过 CSP 协议 加载 JSpider

这个 CSP 协议是为了防止文件的非正常途经载入而使用的。所以一般通过 script 标签和 import 引入不了文件。

但是如果 fetch 和 XHR 可以请求到文件,然后以 Blob 数据接收并转化为字符串,使用 eval 注入脚本,可以绕过 CSP 协议。

如果 fetch 和 XHR 也被禁止的话,就只能手动使用 开发者工具 的 snippets 执行载入了

但是暂未提供 es5 版本文件。


相关依赖

BootCDN: 提供动态载入下面的库。

JSZip: 一个前端压缩数据的库。

fast-xml-parser: XML => JSON 的库。

License

MIT :copyright: 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
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
JavaScript
1
https://gitee.com/charlessong/jspider.git
git@gitee.com:charlessong/jspider.git
charlessong
jspider
JSpider
master

搜索帮助