NaiboWang / EasySpider

A visual no-code/code-free web crawler/spider易采集:一个可视化浏览器自动化测试/数据采集/爬虫软件,可以无代码图形化的设计和执行爬虫任务。别名:ServiceWrapper面向Web应用的智能化服务封装系统。
https://www.easyspider.net
Other
36.23k stars 4.43k forks source link

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

Open NaiboWang opened 1 year ago

NaiboWang commented 1 year ago

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

这部分是长期开发计划:

yfdyh000 commented 1 year ago

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

NaiboWang commented 1 year ago

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

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

timodaxia2019 commented 1 year ago

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

NaiboWang commented 1 year ago

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

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

因此暂时不考虑。

SarcomTDG commented 1 year ago

加上打印日志功能

wzt0501 commented 1 year ago

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

Forrestz88 commented 1 year ago

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

NaiboWang commented 1 year ago

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

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

Forrestz88 commented 1 year ago

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

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

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

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

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

NaiboWang commented 1 year ago

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

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

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

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

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

表头可以在设计时改。

jyxzwd commented 1 year ago

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

NaiboWang commented 1 year ago

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

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

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

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

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

谢谢建议~

BanKnight commented 1 year ago

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

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

liujuncn commented 1 year ago

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

NaiboWang commented 1 year ago

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

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

liujuncn commented 1 year ago

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

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

NaiboWang commented 1 year ago

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

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

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

liujuncn commented 1 year ago

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

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

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

NaiboWang commented 1 year ago

这个在提取数据操作前用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 commented 1 year ago

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

NaiboWang commented 1 year ago

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

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

aogg commented 1 year ago

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

NaiboWang commented 1 year ago

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

无头模式现在就有。

handeserve commented 1 year ago

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

NaiboWang commented 1 year ago

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

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

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

handeserve commented 1 year ago

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

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

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

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

NaiboWang commented 1 year ago

把你的任务文件发我邮箱:naibowang@foxmail.com,我去帮你看下

handeserve commented 1 year ago

把你的任务文件发我邮箱:naibowang@foxmail.com,我去帮你看下

好的,谢谢,我的是mac,应该在哪找我的任务文件呢,是这个吗 截屏2023-07-05 22 43 42

NaiboWang commented 1 year ago

是的

NaiboWang commented 1 year ago

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

导入MySQL数据库功能的版本已发布,欢迎使用。

rikka5201 commented 1 year ago

1.多线程任务 2.执行任务时增加不显示浏览器窗口的选项 3.提取数据时加入自定义文本(包括转义字符)

NaiboWang commented 1 year ago

1.多线程任务

2.执行任务时增加不显示浏览器窗口的选项

3.提取数据时加入自定义文本(包括转义字符)

这三个功能很早就实现了,请看视频教程列表里的相关内容。

koushui commented 1 year ago

建议增加 非浏览器模拟访问的 爬取方式,如直接发送Https/http请求,请求里变量变化采集方式

xpkyy commented 1 year ago
作者您好,首先感谢您的无私奉献!

使用EasySpider有段时间了,目前感觉在日志记录上不够详尽,希望下一版能提供【保存错误信息】的选项,

详细说明如下: 现有的日志文件只是记录了操作指令以及错误消息,没有采集到的上下文内容,无法定位是哪一条信息出问题, 仅能用作开发阶段调试,目前我都是隔一段时间检查控制台,看看有没有错误信息,记录下来采集结束后统一处理, 由于控制台仅能保存最近3000行左右的内容,远远不够容纳数以万计的内容,一会儿不检查可能就会漏掉错误信息, 导致采集的信息缺失甚至错误,所以希望有一个【保存错误信息】的选项,就是采集保存的文件里带有所有错误, 和控制台回显的内容一样就够了,这样就不用人一直在旁边盯着啦。 因为很多时候测试都OK了,一旦实际运行的时间久了,会遇到各种意想不到的问题,这些问题测试阶段无法预测, 所以只能利用控制台回显的错误信息+采集到的上下文内容来定位具体信息,并做针对处理,这里举些例子: ①原本我采集的内容只有检测到对象存在了才进行采集,后来发现对象存在以后,有时加载的内容是错误的,需要等, 等一瞬或者等几秒甚至十几秒不定,才能加载出正确内容,这需要再对采集到的内容文本增加一个解析判断的操作。 ②有时网页加载完毕,显示某个结果为空【正常就是有空有多条的情况】,过了几秒居然又自己刷新出来几条结果。 ③有时循环采集某个多页列表,明明循环列表的XPATH是一样的,但是总有个别时候会报错找不到某某PATH之类。

类似种种意想不到的问题,只有发现了才能去解决,所以log记录非常重要,希望作者能抽空完善一下,感激不尽!
NaiboWang commented 1 year ago
作者您好,首先感谢您的无私奉献!

使用EasySpider有段时间了,目前感觉在日志记录上不够详尽,希望下一版能提供【保存错误信息】的选项,

详细说明如下: 现有的日志文件只是记录了操作指令以及错误消息,没有采集到的上下文内容,无法定位是哪一条信息出问题, 仅能用作开发阶段调试,目前我都是隔一段时间检查控制台,看看有没有错误信息,记录下来采集结束后统一处理, 由于控制台仅能保存最近3000行左右的内容,远远不够容纳数以万计的内容,一会儿不检查可能就会漏掉错误信息, 导致采集的信息缺失甚至错误,所以希望有一个【保存错误信息】的选项,就是采集保存的文件里带有所有错误, 和控制台回显的内容一样就够了,这样就不用人一直在旁边盯着啦。 因为很多时候测试都OK了,一旦实际运行的时间久了,会遇到各种意想不到的问题,这些问题测试阶段无法预测, 所以只能利用控制台回显的错误信息+采集到的上下文内容来定位具体信息,并做针对处理,这里举些例子: ①原本我采集的内容只有检测到对象存在了才进行采集,后来发现对象存在以后,有时加载的内容是错误的,需要等, 等一瞬或者等几秒甚至十几秒不定,才能加载出正确内容,这需要再对采集到的内容文本增加一个解析判断的操作。 ②有时网页加载完毕,显示某个结果为空【正常就是有空有多条的情况】,过了几秒居然又自己刷新出来几条结果。 ③有时循环采集某个多页列表,明明循环列表的XPATH是一样的,但是总有个别时候会报错找不到某某PATH之类。

类似种种意想不到的问题,只有发现了才能去解决,所以log记录非常重要,希望作者能抽空完善一下,感激不尽!

已经更新,可以下载最新源码自行编译或等待下一个版本正式版发布。

xpkyy commented 1 year ago

好的,非常感谢!

nunamia commented 1 year ago

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

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

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

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

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

谢谢建议~

还刚下载,对整个项目不熟,后续使用熟练了,有时间就参加一起完善

sylcool commented 1 year ago

可以配置paddleOCR吗,Tesseract特殊字体识别效果不太好。

NaiboWang commented 1 year ago

可以配置paddleOCR吗,Tesseract特殊字体识别效果不太好。

下个版本会换成ddddocr,paddleOCR需要自行下载代码更换,因为太重量级了无法直接集成。

Nonce-lv commented 1 year ago

需要增加一个增量爬网的功能。

比对已经抓取的数量,重复后停止后续操作。

hzdu commented 1 year ago

我有一个需求是这样的,录入新生的学籍信息,一个个手输非常的麻烦,能不能用EasySpider导入execl文件以后逐行读取每个学籍信息填入表单里,然后循环去执行 这里还会涉及到一个学校照片上传的操作,能实现最好了

NaiboWang commented 1 year ago

我有一个需求是这样的,录入新生的学籍信息,一个个手输非常的麻烦,能不能用EasySpider导入execl文件以后逐行读取每个学籍信息填入表单里,然后循环去执行 这里还会涉及到一个学校照片上传的操作,能实现最好了

对于批量填写表单功能,使用0.5.0的以下功能配合Excel读取可实现:

image image

但因为涉及到了图片上传功能,则需要使用自定义操作中的当前环境下执行代码EXEC功能,配合下面的代码实现:

https://blog.csdn.net/huilan_same/article/details/52439546

需要注意的是EasySpider定位是一个数据采集软件,因此填写表单这种需求并不是软件的核心。

HHR-learner commented 1 year ago

想请问下那种点击按钮下载文件之后的保存路径可以指定吗

NaiboWang commented 1 year ago

想请问下那种点击按钮下载文件之后的保存路径可以指定吗

用带用户信息的浏览器设计和执行,更改浏览器下载目录即可。

steelor commented 1 year ago

如果我想让两个类型的元素并行两列输出怎么实现?(在同类型元素识别不了的情况下) 比如微博发文的作者和发布时间作为两个元素无法实现上述功能 如果分开提取,会生成两列但也不会一一对应,不在同一个循环提取的对应列会自动填充同一元素 image

steelor commented 1 year ago

我还有一个问题,对于同一个页面,xpath能够定位到所有的元素,为什么还要使用循环去一行一行提取?不能直接提取所有定位到的元素文本吗?

NaiboWang commented 1 year ago

我还有一个问题,对于同一个页面,xpath能够定位到所有的元素,为什么还要使用循环去一行一行提取?不能直接提取所有定位到的元素文本吗?

可以直接提取所有定位到的元素文本,如果不使用循环,则所有的元素文本都会在同一列,一共只有一行。 如果使用循环,参考地震台网,可以生成结构化的多行数据。

根据自己的实际情况来决定使用哪种方式即可。

steelor commented 1 year ago

请问如果某些页面xpath不能进行定位(应该有反爬),有其他方法可以选择吗?

HHR-learner commented 1 year ago

想请问下那种点击按钮下载文件之后的保存路径可以指定吗

用带用户信息的浏览器设计和执行,更改浏览器下载目录即可。

作者你好,我发现这样子在调用任务时还是会恢复默认的下载路径,并不能下载到更改的路径内。并且在翻阅源码时发现在easyspider_executestage.py文件内有写默认下载路径在对应task中,但在实际使用中貌似并没有执行,貌似是bug。

NaiboWang commented 1 year ago

想请问下那种点击按钮下载文件之后的保存路径可以指定吗

用带用户信息的浏览器设计和执行,更改浏览器下载目录即可。

作者你好,我发现这样子在调用任务时还是会恢复默认的下载路径,并不能下载到更改的路径内。并且在翻阅源码时发现在easyspider_executestage.py文件内有写默认下载路径在对应task中,但在实际使用中貌似并没有执行,貌似是bug。

源码里并没有指定文件下载目录,只指定了图片下载目录,因此下载的文件会存在系统默认的下载路径中,如下载文件夹。 如果使用的是带用户信息模式,理论上修改的下载位置会被保存下来,不会有问题。