Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

记录下待开发的功能,大家也可以来提想要的功能 #25

Open
12 of 48 tasks
NaiboWang opened this issue May 13, 2023 · 111 comments
Open
12 of 48 tasks

记录下待开发的功能,大家也可以来提想要的功能 #25

NaiboWang opened this issue May 13, 2023 · 111 comments
Assignees
Labels
enhancement New feature or request

Comments

@NaiboWang
Copy link
Owner

NaiboWang commented May 13, 2023

以下功能会在有空的时候集中开发,大家有什么想要的功能也可以提issues留言,也欢迎大家fork之后帮我开发并提交pull request~

这部分是长期开发计划:

  • 设计阶段通过outside:code.js来加载JS代码,并暴露交互接口方便和设计阶段的程序交互。

  • 接入cms。

  • m3u8下载。

  • 智能检测主要内容块并标记选中,思路:先滚动直到到达5次没有新内容加载,然后根据网页中的html内容,检测最大的块(子元素结构一致且数量最多的块)作为主要块,并自动选中子元素。
    另一种思路:将整个网页每个节点的具体内容替换成长度的数字,然后分析这个树,根据字数长短寻找最佳块。占比面积最大的块是什么,标记清楚(硕士论文最早的一章)。

  • 引入大语言模型,用于分析页面主要内容及识别验证码等,如将图片类验证码转换为文字后,用大语言模型/多模态模型过验证码。

  • 构建Docker镜像和Web前端页面,可以远程访问,调用和执行服务器的爬虫任务;通过http调用的方式直接执行任务。

  • Oracle/Sql Server/MongoDB/Postgre数据库入库功能。

  • iframe层数设置。

  • 循环和提取数据可以不止选择第一个元素。

  • 底层框架可以考虑换playwright。

  • 操纵扩展页面。

  • 手机APP采集支持。

  • 插件版本的EasySpider处理CloudFlare等极端网站。

  • 任务列表排序和搜索。

  • 拼接后给XPath最终是多少的提示。

  • 插件测试,saveData()之前过一个全局插件用来处理数据为其他指定格式,如导入翻译插件(新导包的路径依赖怎么做),试一下是否可以将self.替换成其他的如browser.就可以完成指定任务。

  • 命令行默认为local模式。

  • 数据写入模式中增加文件已存在自动重命名,下载文件同名情况下重命名(多线程测试,keyboard参数测试,采集速度测试,两个相同任务ID同时下载文件测试)。

  • cookies池功能。

  • 自定义操作新增“生成新数据行”,“清空字段值”,“退出程序”的操作。

  • 自定义操作新增“切换标签页”,“关闭当前标签页”,“最大化窗口”的操作,循环文本列表同样需要处理标签页。

  • 试运行JS增加提示返回值功能。

  • 提取数据操作试运行可以实时显示多数类型的元素提取值。

  • 字段内容示例值很长时自动换行。

  • MacOS下循环点击每个链接的Bug修复。

  • 判断条件增加多个值,与或都行。

  • 操作台增加OCR识别图片选项。

  • 下载的图片名称可自定义,用于后续读取图片方便验证码识别等。

  • 出一期设计阶段不用自带浏览器设计的教程(不能自动点击和输入文字)。

  • 文心一言测试。

  • PDF生成。

  • 文章生成doc,图片插入到文字中保持顺序不变。

  • 保存任务提示时间减少。

  • 操作备注。

  • 循环的XPath也可以使用上层循环做拼接。

  • 可选是否加载图片和视频以提高效率。

  • (Bug修复)打开网页默认应该打开的是链接池的第一个链接。

  • 双击操作。

  • mysql数据去重bug:1054, unknown column '_id' in 'field list'.

  • 字段设置为常量。

  • Shadow-root处理。

  • 下载文件是否自动重命名选项。

  • 动态调试//text()[1]可以爬到但是动态调试匹配不到

  • (在不可优化的情况下,如设置了换行的需求)当一个XPath可以匹配到多个元素时,改变逻辑从只提取第一个匹配到的元素到提取所有匹配到的元素并合并文本。
    356.json

  • Docker模式下带用户信息模式的Bug修复。

  • 操作台关闭后可以重新打开。

  • EasySpider主程序没开时,运行执行阶段程序会报错,把这个错误提示出来,即提示用户主程序没开不能使用local的remote功能。

  • 用getHTML()来解决shadowroot提取的问题。

@yfdyh000
Copy link
Contributor

刚刚接触,代码上的初步意见:
未看出Git中放打包的EasySpider.crx,以及分成en和zh两版的意义。
从代码国际化(i18n)来说,lang=zh应该zh-cn或zh-hans。
代码和自述里中英混杂,对fork发展也许不太友好。

@NaiboWang
Copy link
Owner Author

NaiboWang commented May 20, 2023

刚刚接触,代码上的初步意见: 未看出Git中放打包的EasySpider.crx,以及分成en和zh两版的意义。 从代码国际化(i18n)来说,lang=zh应该zh-cn或zh-hans。 代码和自述里中英混杂,对fork发展也许不太友好。

感谢,都是非常好的建议。
以上问题大部分原因基本都在于刚开始这个软件是个纯中文软件,只是后来要投稿国际会议WWW 2023所以赶鸭子上架拼凑了一个英文版出来,所以没时间查看其他双语规范的写法。至于en和zh两版是临时想出的解决方案,所有的中英文版本几乎都是独立加载的,没有参考通用写法。
代码和自述中英混杂是我的习惯问题,因为主要是想中国人用,所以中文放前面,英文只是顺便翻译了一下,不过以后可以考虑分开。
放出打包的.crx意义确实不大,应该在.gitignore中消掉。
现阶段我的主要工作还是做科研,等空出时间了会把代码继续重构,符合通用规范。
再次感谢提出宝贵的建议!

@timodaxia2019
Copy link

能不能考虑把采集到的内容直接发布到常用的网站类型中,谢谢!

@NaiboWang
Copy link
Owner Author

能不能考虑把采集到的内容直接发布到常用的网站类型中,谢谢!

这属于衍生需求,有很多工具可以做,参考:https://www.zhihu.com/question/52240701

因此暂时不考虑。

@SarcomTDG
Copy link

加上打印日志功能

@wzt0501
Copy link

wzt0501 commented Jun 7, 2023

1.列表页字段和详情页的字段能对应上;
2.相似的块的字段名称和字段值能不能识别生成,有的只知道区域,但字段名称不一定是固定的

@Forrestz88
Copy link

采集下来数据的CSV文件的列表头(对应于任务信息当中输出参数的参数名称)的各个字段名称,能否根据采集者的意愿在任务中做配置,从而自动修改?

@NaiboWang
Copy link
Owner Author

采集下来数据的CSV文件的列表头(对应于任务信息当中输出参数的参数名称)的各个字段名称,能否根据采集者的意愿在任务中做配置,从而自动修改?

能不能说详细一点什么叫做自动修改,现在各个字段的名称是可以手动修改的。

@Forrestz88
Copy link

采集下来数据的CSV文件的列表头(对应于任务信息当中输出参数的参数名称)的各个字段名称,能否根据采集者的意愿在任务中做配置,从而自动修改?

能不能说详细一点什么叫做自动修改,现在各个字段的名称是可以手动修改的。

所谓自动,就是我们事先在任务当中配置好该怎么修改,之后,执行完任务,采集下来的数据已经是按照我们事先的设定改好了,而不需要我们去手动在CSV或Excel文件中修改列表头,这就是我所谓的自动。

你提到的现在可以手动修改是指在任务配置过程中就修改好了是吗?如果是在任务配置过程中修改就修改好了,逻辑上就已经是我讲的自动修改的意思了。

我之前用八爪鱼用的很多。八爪鱼当中,列表头的字段名称是可以按照采集者的想法进行任意修改的。你的视频我没时间看。我是昨天一边做别的事,一边一口气听完的,中文的听了16集。软件没上手练,界面可能不熟悉。因为没听到说可以改列表头的这个说法,所以我以为列表头不能在任务配置文件中改呢。

@NaiboWang
Copy link
Owner Author

采集下来数据的CSV文件的列表头(对应于任务信息当中输出参数的参数名称)的各个字段名称,能否根据采集者的意愿在任务中做配置,从而自动修改?

能不能说详细一点什么叫做自动修改,现在各个字段的名称是可以手动修改的。

所谓自动,就是我们事先在任务当中配置好该怎么修改,之后,执行完任务,采集下来的数据已经是按照我们事先的设定改好了,而不需要我们去手动在CSV或Excel文件中修改列表头,这就是我所谓的自动。

你提到的现在可以手动修改是指在任务配置过程中就修改好了是吗?如果是在任务配置过程中修改就修改好了,逻辑上就已经是我讲的自动修改的意思了。

我之前用八爪鱼用的很多。八爪鱼当中,列表头的字段名称是可以按照采集者的想法进行任意修改的。你的视频我没时间看。我是昨天一边做别的事,一边一口气听完的,中文的听了16集。软件没上手练,界面可能不熟悉。因为没听到说可以改列表头的这个说法,所以我以为列表头不能在任务配置文件中改呢。

表头可以在设计时改。

@jyxzwd
Copy link

jyxzwd commented Jun 21, 2023

作者您好,我想提一个关于对 采集到的数据处理的一个 小建议
现在的EasySpider默认是将采集到的数据以 csv 的格式储存在文件里,但是大多数时候我们也会有将数据持久到数据库或者别的文件格式的需求,能否提供自定义的持久化方式?
其实持久化到数据库这个操作也可以通过 现在已经提供的 插入js代码来调用其他api 来“间接”实现这个功能(这是我目前能想到的方法)

@NaiboWang
Copy link
Owner Author

作者您好,我想提一个关于对 采集到的数据处理的一个 小建议 现在的easySpdier默认是将采集到的数据以 csv 的格式储存在文件里,但是大多数时候我们也会有将数据持久到数据库或者别的文件格式的需求,能否提供自定义的持久化方式? 其实持久化到数据库这个操作也可以通过 现在已经提供的 插入js代码来调用其他api 来“间接”实现这个功能(这是我目前能想到的方法)

谢谢建议,这个程序设置的初衷是为那些不会写代码的朋友准备的,没想到发布后会有很多人想要写入数据库这种程序员级别的操作。

因为CSV转DB或者写入SQL数据库这个操作已经有很多开源实现,如:https://github.com/simonw/csvs-to-sqlite

因此这个功能属于边缘功能,大家如果想写入数据库总会找到办法,因此这个功能暂时不会考虑开发。

我倒希望有朋友能提交Pull Request,帮我一起完善这个软件,很遗憾发布了一个多月还没有有效的PR提交,一个人维护一个项目实在有些力不从心,将来我个人的重点也会主要集中在核心功能的开发上,至于写入数据库这种边缘功能,期待有朋友帮我做。

谢谢建议~

@BanKnight
Copy link

BanKnight commented Jun 23, 2023

目前发现还是变量这块不太行(如果实现了,麻烦也告知一下)
例如:

  • 提取页面数据作为循环次数
  • 提取页面数据作为xpath依据
  • 提取页面数据作为“切换下拉选项”的依据

再就是,编辑器部分建议优化为可以拖动那种操作,虽然目前也够用,但是第一次上手还是不太符合直觉

@liujuncn
Copy link

能支持下载网页中的文件么?例如PDF

@NaiboWang
Copy link
Owner Author

能支持下载网页中的文件么?例如PDF

最新版本特性里就写了可以下载pdf……

@liujuncn
Copy link

不好意思,只注意看教学视频了。

另外还有一个建议,对于采集多个页面文章的情况下,默认会把文本合并到输出的csv文件里。那么能否在提取数据的设置里增加一项用户自定义分隔项,例如我可以把每篇文章的文本用<|endoftext|>分隔。

@NaiboWang
Copy link
Owner Author

不好意思,只注意看教学视频了。

另外还有一个建议,对于采集多个页面文章的情况下,默认会把文本合并到输出的csv文件里。那么能否在提取数据的设置里增加一项用户自定义分隔项,例如我可以把每篇文章的文本用<|endoftext|>分隔。

这个在提取数据操作前用JS操作一下就行了,可以参考下面这个视频:
https://www.bilibili.com/video/BV1qs4y1z7Hc

@liujuncn
Copy link

liujuncn commented Jun 28, 2023

这个在提取数据操作前用JS操作一下就行了,可以参考下面这个视频: https://www.bilibili.com/video/BV1qs4y1z7Hc

这样试了不行:
image
如果在“提取页面文本”元素用js追加文本,会给每个p文本都追加。而我希望给整个页面提取出来的文本追加。
如果在该页面所有p文本提取的循环结束后用js追加(如图),结果是没有期望结果。
而且我也不希望追加的eot作为另一个单独的字段。

这个需求抽象来说就是:
我需要对某个操作或循环的结果,可以用js来处理并替代它们记录到csv。 例如上述例子:详情页面的每个p元素的文本被采集为text字段,那么这个页面处理的循环结束后,我需要用js处理结果,合并它们并追加一个eot标签字符串,然后将这个修改后的页面文本保存到结果csv。

@NaiboWang
Copy link
Owner Author

NaiboWang commented Jun 28, 2023

这个在提取数据操作前用JS操作一下就行了,可以参考下面这个视频: https://www.bilibili.com/video/BV1qs4y1z7Hc

这样试了不行: image 如果在“提取页面文本”元素用js追加文本,会给每个p文本都追加。而我希望给整个页面提取出来的文本追加。 如果在该页面所有p文本提取的循环结束后用js追加(如图),结果是没有期望结果。 而且我也不希望追加的eot作为另一个单独的字段。

这个需求抽象来说就是: 我需要对某个操作或循环的结果,可以用js来处理并替代它们记录到csv。 例如上述例子:详情页面的每个p元素的文本被采集为text字段,那么这个页面处理的循环结束后,我需要用js处理结果,合并它们并追加一个eot标签字符串,然后将这个修改后的页面文本保存到结果csv。

先找到你的EasySpider\resources\app\src\taskGrid文件夹,把logic_CN.js的第375到383行删掉,即删掉以下内容:

 if (outputNames.indexOf(title) >= 0) { //参数名称已经被添加
      $('#myModal').modal('hide');
      $("#tip2").slideDown(); //提示框
      fadeout = setTimeout(function() {
          $("#tip2").slideUp();
      }, 5000);
      return;
  }

然后把上面自定义操作的名称改成和上面“提取页面文本”操作里一样的字段名称,如参数1_文本,即可使得相同字段里的内容放在一起。

@liujuncn
Copy link

这个办法生效,就是它还是会在csv首行生成一个同名列。如果后续需要处理,例如使用pandas.read,还需要人工去删除一下。

@NaiboWang
Copy link
Owner Author

这个办法生效,就是它还是会在csv首行生成一个同名列。如果后续需要处理,例如使用pandas.read,还需要人工去删除一下。

OK,这个bug会在下一个版本修复。

@aogg
Copy link

aogg commented Jul 3, 2023

搞个无头模式,最好能docker运行

@NaiboWang
Copy link
Owner Author

搞个无头模式,最好能docker运行

无头模式现在就有。

@handeserve
Copy link

能不能加个关闭当前标签页,我点开链接都是新的标签页,导致没法后退,循环立马就断了

@NaiboWang
Copy link
Owner Author

能不能加个关闭当前标签页,我点开链接都是新的标签页,导致没法后退,循环立马就断了

没法后退导致循环断不知道你是怎么设计的,理论上不太可能。

如果想关闭标签页,添加自定义操作,命令值为:window.close()即可。

@handeserve
Copy link

能不能加个关闭当前标签页,我点开链接都是新的标签页,导致没法后退,循环立马就断了

没法后退导致循环断不知道你是怎么设计的,理论上不太可能。

如果想关闭标签页,添加自定义操作,命令值为:window.close()即可。

我加了window.close()之后,直接把整个浏览器关了。
我的浏览器,点击链接之后就是在新标签页打开,然后每次打开完第一个链接,提取过数据之后,程序就结束了,我也不知道什么情况
这是我的程序,前面都没问题,点击详情页,就会打开一个新的标签页,然后里面有个元素是下载PDF的,点了以后就可以下载,然后不管加不加window.close(),下载完都会直接结束程序
截屏2023-07-05 22 29 39

@NaiboWang
Copy link
Owner Author

把你的任务文件发我邮箱:[email protected],我去帮你看下

@ltjfk
Copy link

ltjfk commented Mar 13, 2024

遇到一个问题,当爬取安全证书过期的时候,浏览器会自动跳出安全提示,在selenium里面有对网站安全问题进行忽略的指令,但在v0.6.0里目前找不到合适的方式,除了暂停后手动操作

@NaiboWang
Copy link
Owner Author

遇到一个问题,当爬取安全证书过期的时候,浏览器会自动跳出安全提示,在selenium里面有对网站安全问题进行忽略的指令,但在v0.6.0里目前找不到合适的方式,除了暂停后手动操作

可以下载源码后加上那条忽略指令试试行不行,如果可以也欢迎提交pull requests合并代码。

@FinchXia
Copy link

我们招标代理经常需要查询某单位或者某个人的证书真伪,在同一网站上输入不同的信息,纯机械劳动。
现在用ES能减少机械劳动,但是不同的单位或个人信息只能在任务执行-参数值内修改,还是不够快。
能否将需要查询的信息都按格式写在Excel表格中,然后任务能循环读取表格每行的信息,给出相应的结果。

@NaiboWang
Copy link
Owner Author

我们招标代理经常需要查询某单位或者某个人的证书真伪,在同一网站上输入不同的信息,纯机械劳动。 现在用ES能减少机械劳动,但是不同的单位或个人信息只能在任务执行-参数值内修改,还是不够快。 能否将需要查询的信息都按格式写在Excel表格中,然后任务能循环读取表格每行的信息,给出相应的结果。

请仔细查阅文档和教程,从Excel读取的功能早就支持了。

@Prime-H
Copy link

Prime-H commented Mar 27, 2024

双击操作什么时候能推出呢?或者说能不能提供自定义操作的代码

@leic4u
Copy link

leic4u commented Apr 4, 2024

期待 docker 版本和 webUI 发布

@Y843512864
Copy link

Y843512864 commented Apr 7, 2024

有没有只爬API的办法啊,不开浏览器,我在现在的版本里没找到类似的操作,各位老师有知道的烦请告知一下哦,谢谢
-》 不是写js那种哈要不然用postman就行了

@trainliang
Copy link

能不能把容器化开发提上日程,现在环境受限,长期开机的也就arm小主机,win版不那么实用呀

@NaiboWang

This comment was marked as resolved.

@xiaomayisjh

This comment was marked as resolved.

@suxutao
Copy link

suxutao commented May 7, 2024

能不能给软件添加夜间模式啊,软件用着不错,但白色背景眼睛看着不舒服

@liangfengyuan
Copy link

liangfengyuan commented May 10, 2024

构建Docker镜像和Web前端页面,可以远程访问,调用和执行服务器的爬虫任务;通过http调用的方式直接执行任务。

这个急需啊,现在做了计划任务。但同时只能跑一个任务。而且我不好判定当前的任务是否完成。现在只能租略的加机器来处理这个问题。最好是有一个主控,可以做所有的定时,把任务分发到相应的机器上,最好是Docker,这样部署在K8S里就可以按需自动加Pod了,现在浏览器是用的Docker做的。但是感觉效果不大。因为请求端也不能一台机器上同时跑。

还是要感谢大神提供这么优秀的作品。确实省了不少的时间来做采集。

@baipiaocong123
Copy link

baipiaocong123 commented May 16, 2024

采集图文文章时,innerHTML中希望可以加入一个,可以过滤标签的功能。希望能优化下:如这篇文章:https://www.dongchedi.com/article/7238974191096152615,只需要p标签和img,如果用之前视频教程的方式图文已经分开了。希望把一个字段里面有文本和img标签,这样另存doc方便些

@wd4455
Copy link

wd4455 commented May 28, 2024

希望能增加指定采集的网页窗口和关闭指定的网页窗口,采集完关闭新开的窗口/网页

@lordshenone
Copy link

能否增加一个这种功能:
对于设定好的字段检查是否有更新。如果更新了就抓取字段内容。没更新就不做任何动作,等下一次循环再检测。

好像这个软件不能读取抓取的数据文件的内容。所以好像不太容易实现这个功能。也有可能是我用的不熟练。这个软件已经能够实现了,就是我不会用而已。

@horryruo
Copy link

horryruo commented Jun 11, 2024

需要爬取小说网站,想要一本小说一个页面保存一个txt,而且文件名可以是网页标题,现在的话是把所有小说都合并成一个文件了,可以新增这个功能吗

@ltjfk
Copy link

ltjfk commented Jun 11, 2024 via email

@kanchangxin
Copy link

提取数据时发现xpath显示不正确,后来发现是 shadow dom ,用xpath无法抓,有解决方案吗

@Linqi18
Copy link

Linqi18 commented Jul 31, 2024

导出为.py

@ltjfk
Copy link

ltjfk commented Jul 31, 2024 via email

@zyoung1212
Copy link

希望增加详情页的url和html能直接调用外部接口解析和存储。
(比如已经用java实现了html的正文抽取和入库逻辑,希望能直接调用)。
目前已经尝试了用js调用,但是各种问题...比如必须接口是https,否则报错

@MisteryLiuCode
Copy link

可以通过api调用执行任务吗

@ltjfk
Copy link

ltjfk commented Aug 26, 2024 via email

@gitlGl
Copy link

gitlGl commented Sep 28, 2024

希望分享其中涉及到的反反爬技术

@ltjfk
Copy link

ltjfk commented Sep 28, 2024 via email

@victoryhb
Copy link

目前的各个环节(如设计和执行、流程和采集)的UI有点割裂,比如设计完任务要先保存任务,关闭页面,回到首页,然后点击三次或以上才能执行(相比之下八爪鱼执行当前任务只需在同一界面下点击两次),有些页面完全是多余的(如每次进入都要选择中英文)。能否参照八爪鱼或Parsehub等做一下UI的优化?谢谢!

@AhYi8
Copy link

AhYi8 commented Oct 10, 2024

建议支持file://协议,爬取本地html,html是通过js动态加载的

@Hmr8015
Copy link

Hmr8015 commented Nov 10, 2024

希望增加分屏设置,其他软件在启动器在目标路径后加上 -monitor2 就可以稳定在2屏启动,另外,希望启动器打开的任务浏览器也一同绑定到一个屏幕;现在我把软件移动到2屏,在2屏打开,主界面、任务打开的浏览器还是在主屏打开。谢谢大佬。

@ltjfk
Copy link

ltjfk commented Nov 10, 2024 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests