KonghaYao / jspider

This is a JavaScript toolkit for browser crawler testing.
https://konghayao.github.io/jspider
Apache License 2.0
3 stars 0 forks source link

这个库真的太棒了,学习中 #4

Open thouger opened 3 years ago

thouger commented 3 years ago

文档有些东西好像没有更新到最新的一个,比如

let obj = {
    name: ['张三', '李四', {
        name: '王五'
    }],
    age: 30,
    sex: undefined,
    work: {
        java: "张六",
         php: "李六",
        java: "目录"
    }
}

let spider = new JSpider()
spider.Search.search(obj,/张/)

spider.Search.search(obj,/张/) 应该是spider.search(obj,/张/),其他地方还在学习..一起在这里提了

thouger commented 3 years ago

http://dongzhongzhidong.gitee.io/npm-document-page/

let spider =new JSpider()
spider.Search.Globals()

同样的这里应该是spider.Globals()

thouger commented 3 years ago

Hook那边看的不是很懂,我js太菜了,但是这个功能太厉害了。它hook一个函数,就需要设置断点触发它,但是一旦刷新导入的jspider就没效了,这么怎么解决啊

thouger commented 3 years ago

http://dongzhongzhidong.gitee.io/npm-document-page/ 这里的jspider.Observer.hook应该是jspider.hook

KonghaYao commented 3 years ago

函数的位置出错是因为部分版本的问题,之前安排函数的时候过于复杂,用了很多层包裹,所以最后一个版本简化了。然后 Hook 是用于函数劫持的,一般是在 Chrome 开发者工具中打了断点之后,想要不通过断点监控数据变化,并自动获取。比如说,我点击一个button就可以获取到一个数据,但是这个事件流中没有可以用代码正常介入的位置(被webpack 打包),这个时候就可以先打断点,然后用 Hook 代理Ajax函数或其他函数,就可以截取到这个数据流。Hook 一般用于绕过加密措施获取数据,在加密或解密后将数据取出,这样可以不用去处理。但是缺点是浏览器的刷新问题。

KonghaYao commented 3 years ago

我最近也在学习更多的编程结构知识,比如 rxjs ,来提升编程能力,因为 jspider 的最后一个版本的设计并不是那么巧妙,而且最重要的数据保存部分也没有涉及到,这个是我在做完后实践发现的,所以我正在编制 jspider 3.0。3.0 将同时支持 nodejs 和浏览器,并加入任务管理和数据保存操作,并提供更加好的插件机制。

KonghaYao commented 3 years ago

很感谢您发现了我的这个库,说实话,这个库是比较没有希望的,因为前端开始普及 CSP 协议了,B 站,百度都完成了,所以通过前端引入代码不太好操作。我是直接把常用的库都放置到 Chome Snippets 里面了,比较好的做法是通过谷歌插件引入,但由于能力有限,还没有学到。。。所以我把矛头转向了 Nodejs 平台,Nodejs 除了不能够直接操纵 网页 js 外,和其他的编程语言操作爬虫是一样的,但是前端可以直接生成 fetch 代码,那样就可以省去很多时间,所以我在这个方向努力着。

thouger commented 3 years ago

很感谢您发现了我的这个库,说实话,这个库是比较没有希望的,因为前端开始普及 CSP 协议了,B 站,百度都完成了,所以通过前端引入代码不太好操作。我是直接把常用的库都放置到 Chome Snippets 里面了,比较好的做法是通过谷歌插件引入,但由于能力有限,还没有学到。。。所以我把矛头转向了 Nodejs 平台,Nodejs 除了不能够直接操纵 网页 js 外,和其他的编程语言操作爬虫是一样的,但是前端可以直接生成 fetch 代码,那样就可以省去很多时间,所以我在这个方向努力着。

这个其实我在使用的已经就已经有了,但是可以绕过.就算没有CSP,也有跨域,目前都可以通过浏览器绕过,这个最大的作用,在于可以用正常的浏览器通过不写成型的爬虫快速的拿到当前页面的数据,而HOOk可以在断点时把在网页生成前的数据拿下来,这是后端爬虫做不了的,有很多时候有一些临时性的取数,就可以用上,node写出来的爬虫,开发时间长而且也会不稳定,当然长期运行那肯定是要用后端开发,一些在全局object中搜索页非常有用,个人觉得最大的作用就是HOOK,只是不能在断点中使用,有点遗憾,数据保存这个也很多用

KonghaYao commented 3 years ago

跨域的话其实问题不大,在某一个网页上能够请求到数据就已经说明是后端允许的请求了,但是CSP就麻烦得多,比如说吧,我有Leancloud 的后端接口可以直接请求保存下每一次的数据,但是浏览器端CSP禁止了我的跨域请求,那么我的数据就只能放到 indexDB里面暂存了,可能一手贱就删了。。(上次我就是这样。。)。也就是说 CSP 是禁止了本地和特定服务器的沟通,如果我想要使用多台浏览器一起在这个网页爬取,通过后端集中控制进度与收集数据的话,就受CSP限制了。但是可以采取某些低级的浏览器不执行 CSP 协议的方式绕过,这也是一个办法。

KonghaYao commented 3 years ago

发现了一个 Chrome 插件 Disable Content-Security-Policy,但是我没有测试过

KonghaYao commented 3 years ago

跨域也有插件。CORS UnBlock。但是这种越过浏览器安全策略的行为可能导致你的隐私数据泄露,所以我都是在另外的一个浏览器使用。

thouger commented 3 years ago

CSP是可以绕过,只要关掉浏览器内容安全策略设置,chrome的插件都可以抓到network下所有请求的数据,只要在页面获取到数据,能下载回来就行了

KonghaYao commented 3 years ago

确实,其实还有一个小问题,浏览器并发数的问题,浏览器并发数是有限制的,好像在6-9 之间,我没有实际测试过。但是影响不大,因为一般网址都设置了访问频率限制,比如简书,大概在 100ms 1次的情况下会直接禁止你的访问,这个是单机爬虫的弱点,没有办法。分布式的话,有 github action 可以当爬虫用,github action 的服务器放在国外(我试过了),作为单机爬虫还是不错的,所以我想升级 jspider 爬虫任务管理中心,搞多一点 github action 作为傀儡服务器,然后使用一个 leancloud 作为任务中心,就可以愉快地完成大型任务了,同时任务和软件版本分开的话,那么升级版本就不会影响到任务中心,而 github 本身可以作为后端存储,服务器版本在启动时自动安装最新版本的 jspider ,那么这样的话,只需要改动 任务中心的 爬虫代码,不需改动其他部件,而且爬虫完成后自动关闭,持续性和可靠性还是挺高的。

thouger commented 3 years ago
font{
    line-height: 1.6;
}
ul,ol{
    padding-left: 20px;
    list-style-position: inside;
}

    分布式这个我不是很懂,还在学习

                            1030490158

                                ***@***.***

    签名由
    网易邮箱大师
    定制

在2021年4月23日 ***@***.***> 写道: 

确实,其实还有一个小问题,浏览器并发数的问题,浏览器并发数是有限制的,好像在6-9 之间,我没有实际测试过。但是影响不大,因为一般网址都设置了访问频率限制,比如简书,大概在 100ms 1次的情况下会直接禁止你的访问,这个是单机爬虫的弱点,没有办法。分布式的话,有 github action 可以当爬虫用,github action 的服务器放在国外(我试过了),作为单机爬虫还是不错的,所以我想升级 jspider 爬虫任务管理中心,搞多一点 github action 作为傀儡服务器,然后使用一个 leancloud 作为任务中心,就可以愉快地完成大型任务了,同时任务和软件版本分开的话,那么升级版本就不会影响到任务中心,而 github 本身可以作为后端存储,服务器版本在启动时自动安装最新版本的 jspider ,那么这样的话,只需要改动 任务中心的 爬虫代码,不需改动其他部件,而且爬虫完成后自动关闭,持续性和可靠性还是挺高的。

—You are receiving this because you authored the thread.Reply to this email directly, view it on GitHub, or unsubscribe.