Open NaiboWang opened 1 year ago
刚刚接触,代码上的初步意见: 未看出Git中放打包的EasySpider.crx,以及分成en和zh两版的意义。 从代码国际化(i18n)来说,lang=zh应该zh-cn或zh-hans。 代码和自述里中英混杂,对fork发展也许不太友好。
刚刚接触,代码上的初步意见: 未看出Git中放打包的EasySpider.crx,以及分成en和zh两版的意义。 从代码国际化(i18n)来说,lang=zh应该zh-cn或zh-hans。 代码和自述里中英混杂,对fork发展也许不太友好。
感谢,都是非常好的建议。 以上问题大部分原因基本都在于刚开始这个软件是个纯中文软件,只是后来要投稿国际会议WWW 2023所以赶鸭子上架拼凑了一个英文版出来,所以没时间查看其他双语规范的写法。至于en和zh两版是临时想出的解决方案,所有的中英文版本几乎都是独立加载的,没有参考通用写法。 代码和自述中英混杂是我的习惯问题,因为主要是想中国人用,所以中文放前面,英文只是顺便翻译了一下,不过以后可以考虑分开。 放出打包的.crx意义确实不大,应该在.gitignore中消掉。 现阶段我的主要工作还是做科研,等空出时间了会把代码继续重构,符合通用规范。 再次感谢提出宝贵的建议!
能不能考虑把采集到的内容直接发布到常用的网站类型中,谢谢!
加上打印日志功能
1.列表页字段和详情页的字段能对应上; 2.相似的块的字段名称和字段值能不能识别生成,有的只知道区域,但字段名称不一定是固定的
采集下来数据的CSV文件的列表头(对应于任务信息当中输出参数的参数名称)的各个字段名称,能否根据采集者的意愿在任务中做配置,从而自动修改?
采集下来数据的CSV文件的列表头(对应于任务信息当中输出参数的参数名称)的各个字段名称,能否根据采集者的意愿在任务中做配置,从而自动修改?
能不能说详细一点什么叫做自动修改,现在各个字段的名称是可以手动修改的。
采集下来数据的CSV文件的列表头(对应于任务信息当中输出参数的参数名称)的各个字段名称,能否根据采集者的意愿在任务中做配置,从而自动修改?
能不能说详细一点什么叫做自动修改,现在各个字段的名称是可以手动修改的。
所谓自动,就是我们事先在任务当中配置好该怎么修改,之后,执行完任务,采集下来的数据已经是按照我们事先的设定改好了,而不需要我们去手动在CSV或Excel文件中修改列表头,这就是我所谓的自动。
你提到的现在可以手动修改是指在任务配置过程中就修改好了是吗?如果是在任务配置过程中修改就修改好了,逻辑上就已经是我讲的自动修改的意思了。
我之前用八爪鱼用的很多。八爪鱼当中,列表头的字段名称是可以按照采集者的想法进行任意修改的。你的视频我没时间看。我是昨天一边做别的事,一边一口气听完的,中文的听了16集。软件没上手练,界面可能不熟悉。因为没听到说可以改列表头的这个说法,所以我以为列表头不能在任务配置文件中改呢。
采集下来数据的CSV文件的列表头(对应于任务信息当中输出参数的参数名称)的各个字段名称,能否根据采集者的意愿在任务中做配置,从而自动修改?
能不能说详细一点什么叫做自动修改,现在各个字段的名称是可以手动修改的。
所谓自动,就是我们事先在任务当中配置好该怎么修改,之后,执行完任务,采集下来的数据已经是按照我们事先的设定改好了,而不需要我们去手动在CSV或Excel文件中修改列表头,这就是我所谓的自动。
你提到的现在可以手动修改是指在任务配置过程中就修改好了是吗?如果是在任务配置过程中修改就修改好了,逻辑上就已经是我讲的自动修改的意思了。
我之前用八爪鱼用的很多。八爪鱼当中,列表头的字段名称是可以按照采集者的想法进行任意修改的。你的视频我没时间看。我是昨天一边做别的事,一边一口气听完的,中文的听了16集。软件没上手练,界面可能不熟悉。因为没听到说可以改列表头的这个说法,所以我以为列表头不能在任务配置文件中改呢。
表头可以在设计时改。
作者您好,我想提一个关于对 采集到的数据处理的一个 小建议 现在的EasySpider默认是将采集到的数据以 csv 的格式储存在文件里,但是大多数时候我们也会有将数据持久到数据库或者别的文件格式的需求,能否提供自定义的持久化方式? 其实持久化到数据库这个操作也可以通过 现在已经提供的 插入js代码来调用其他api 来“间接”实现这个功能(这是我目前能想到的方法)
作者您好,我想提一个关于对 采集到的数据处理的一个 小建议 现在的easySpdier默认是将采集到的数据以 csv 的格式储存在文件里,但是大多数时候我们也会有将数据持久到数据库或者别的文件格式的需求,能否提供自定义的持久化方式? 其实持久化到数据库这个操作也可以通过 现在已经提供的 插入js代码来调用其他api 来“间接”实现这个功能(这是我目前能想到的方法)
谢谢建议,这个程序设置的初衷是为那些不会写代码的朋友准备的,没想到发布后会有很多人想要写入数据库这种程序员级别的操作。
因为CSV转DB或者写入SQL数据库这个操作已经有很多开源实现,如:https://github.com/simonw/csvs-to-sqlite
因此这个功能属于边缘功能,大家如果想写入数据库总会找到办法,因此这个功能暂时不会考虑开发。
我倒希望有朋友能提交Pull Request,帮我一起完善这个软件,很遗憾发布了一个多月还没有有效的PR提交,一个人维护一个项目实在有些力不从心,将来我个人的重点也会主要集中在核心功能的开发上,至于写入数据库这种边缘功能,期待有朋友帮我做。
谢谢建议~
目前发现还是变量这块不太行(如果实现了,麻烦也告知一下) 例如:
再就是,编辑器部分建议优化为可以拖动那种操作,虽然目前也够用,但是第一次上手还是不太符合直觉
能支持下载网页中的文件么?例如PDF
能支持下载网页中的文件么?例如PDF
最新版本特性里就写了可以下载pdf……
不好意思,只注意看教学视频了。
另外还有一个建议,对于采集多个页面文章的情况下,默认会把文本合并到输出的csv文件里。那么能否在提取数据的设置里增加一项用户自定义分隔项,例如我可以把每篇文章的文本用<|endoftext|>分隔。
不好意思,只注意看教学视频了。
另外还有一个建议,对于采集多个页面文章的情况下,默认会把文本合并到输出的csv文件里。那么能否在提取数据的设置里增加一项用户自定义分隔项,例如我可以把每篇文章的文本用<|endoftext|>分隔。
这个在提取数据操作前用JS操作一下就行了,可以参考下面这个视频: https://www.bilibili.com/video/BV1qs4y1z7Hc
这个在提取数据操作前用JS操作一下就行了,可以参考下面这个视频: https://www.bilibili.com/video/BV1qs4y1z7Hc
这样试了不行: 如果在“提取页面文本”元素用js追加文本,会给每个p文本都追加。而我希望给整个页面提取出来的文本追加。 如果在该页面所有p文本提取的循环结束后用js追加(如图),结果是没有期望结果。 而且我也不希望追加的eot作为另一个单独的字段。
这个需求抽象来说就是: 我需要对某个操作或循环的结果,可以用js来处理并替代它们记录到csv。 例如上述例子:详情页面的每个p元素的文本被采集为text字段,那么这个页面处理的循环结束后,我需要用js处理结果,合并它们并追加一个eot标签字符串,然后将这个修改后的页面文本保存到结果csv。
这个在提取数据操作前用JS操作一下就行了,可以参考下面这个视频: https://www.bilibili.com/video/BV1qs4y1z7Hc
这样试了不行: 如果在“提取页面文本”元素用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_文本
,即可使得相同字段里的内容放在一起。
这个办法生效,就是它还是会在csv首行生成一个同名列。如果后续需要处理,例如使用pandas.read,还需要人工去删除一下。
这个办法生效,就是它还是会在csv首行生成一个同名列。如果后续需要处理,例如使用pandas.read,还需要人工去删除一下。
OK,这个bug会在下一个版本修复。
搞个无头模式,最好能docker运行
搞个无头模式,最好能docker运行
无头模式现在就有。
能不能加个关闭当前标签页,我点开链接都是新的标签页,导致没法后退,循环立马就断了
能不能加个关闭当前标签页,我点开链接都是新的标签页,导致没法后退,循环立马就断了
没法后退导致循环断不知道你是怎么设计的,理论上不太可能。
如果想关闭标签页,添加自定义操作,命令值为:window.close()
即可。
能不能加个关闭当前标签页,我点开链接都是新的标签页,导致没法后退,循环立马就断了
没法后退导致循环断不知道你是怎么设计的,理论上不太可能。
如果想关闭标签页,添加自定义操作,命令值为:
window.close()
即可。
我加了window.close()之后,直接把整个浏览器关了。 我的浏览器,点击链接之后就是在新标签页打开,然后每次打开完第一个链接,提取过数据之后,程序就结束了,我也不知道什么情况 这是我的程序,前面都没问题,点击详情页,就会打开一个新的标签页,然后里面有个元素是下载PDF的,点了以后就可以下载,然后不管加不加window.close(),下载完都会直接结束程序
把你的任务文件发我邮箱:naibowang@foxmail.com,我去帮你看下
把你的任务文件发我邮箱:naibowang@foxmail.com,我去帮你看下
好的,谢谢,我的是mac,应该在哪找我的任务文件呢,是这个吗
是的
作者您好,我想提一个关于对 采集到的数据处理的一个 小建议 现在的EasySpider默认是将采集到的数据以 csv 的格式储存在文件里,但是大多数时候我们也会有将数据持久到数据库或者别的文件格式的需求,能否提供自定义的持久化方式? 其实持久化到数据库这个操作也可以通过 现在已经提供的 插入js代码来调用其他api 来“间接”实现这个功能(这是我目前能想到的方法)
导入MySQL数据库功能的版本已发布,欢迎使用。
1.多线程任务 2.执行任务时增加不显示浏览器窗口的选项 3.提取数据时加入自定义文本(包括转义字符)
1.多线程任务
2.执行任务时增加不显示浏览器窗口的选项
3.提取数据时加入自定义文本(包括转义字符)
这三个功能很早就实现了,请看视频教程列表里的相关内容。
建议增加 非浏览器模拟访问的 爬取方式,如直接发送Https/http请求,请求里变量变化采集方式
作者您好,首先感谢您的无私奉献!
使用EasySpider有段时间了,目前感觉在日志记录上不够详尽,希望下一版能提供【保存错误信息】的选项,
详细说明如下: 现有的日志文件只是记录了操作指令以及错误消息,没有采集到的上下文内容,无法定位是哪一条信息出问题, 仅能用作开发阶段调试,目前我都是隔一段时间检查控制台,看看有没有错误信息,记录下来采集结束后统一处理, 由于控制台仅能保存最近3000行左右的内容,远远不够容纳数以万计的内容,一会儿不检查可能就会漏掉错误信息, 导致采集的信息缺失甚至错误,所以希望有一个【保存错误信息】的选项,就是采集保存的文件里带有所有错误, 和控制台回显的内容一样就够了,这样就不用人一直在旁边盯着啦。 因为很多时候测试都OK了,一旦实际运行的时间久了,会遇到各种意想不到的问题,这些问题测试阶段无法预测, 所以只能利用控制台回显的错误信息+采集到的上下文内容来定位具体信息,并做针对处理,这里举些例子: ①原本我采集的内容只有检测到对象存在了才进行采集,后来发现对象存在以后,有时加载的内容是错误的,需要等, 等一瞬或者等几秒甚至十几秒不定,才能加载出正确内容,这需要再对采集到的内容文本增加一个解析判断的操作。 ②有时网页加载完毕,显示某个结果为空【正常就是有空有多条的情况】,过了几秒居然又自己刷新出来几条结果。 ③有时循环采集某个多页列表,明明循环列表的XPATH是一样的,但是总有个别时候会报错找不到某某PATH之类。
类似种种意想不到的问题,只有发现了才能去解决,所以log记录非常重要,希望作者能抽空完善一下,感激不尽!
作者您好,首先感谢您的无私奉献! 使用EasySpider有段时间了,目前感觉在日志记录上不够详尽,希望下一版能提供【保存错误信息】的选项,
详细说明如下: 现有的日志文件只是记录了操作指令以及错误消息,没有采集到的上下文内容,无法定位是哪一条信息出问题, 仅能用作开发阶段调试,目前我都是隔一段时间检查控制台,看看有没有错误信息,记录下来采集结束后统一处理, 由于控制台仅能保存最近3000行左右的内容,远远不够容纳数以万计的内容,一会儿不检查可能就会漏掉错误信息, 导致采集的信息缺失甚至错误,所以希望有一个【保存错误信息】的选项,就是采集保存的文件里带有所有错误, 和控制台回显的内容一样就够了,这样就不用人一直在旁边盯着啦。 因为很多时候测试都OK了,一旦实际运行的时间久了,会遇到各种意想不到的问题,这些问题测试阶段无法预测, 所以只能利用控制台回显的错误信息+采集到的上下文内容来定位具体信息,并做针对处理,这里举些例子: ①原本我采集的内容只有检测到对象存在了才进行采集,后来发现对象存在以后,有时加载的内容是错误的,需要等, 等一瞬或者等几秒甚至十几秒不定,才能加载出正确内容,这需要再对采集到的内容文本增加一个解析判断的操作。 ②有时网页加载完毕,显示某个结果为空【正常就是有空有多条的情况】,过了几秒居然又自己刷新出来几条结果。 ③有时循环采集某个多页列表,明明循环列表的XPATH是一样的,但是总有个别时候会报错找不到某某PATH之类。
类似种种意想不到的问题,只有发现了才能去解决,所以log记录非常重要,希望作者能抽空完善一下,感激不尽!
已经更新,可以下载最新源码自行编译或等待下一个版本正式版发布。
好的,非常感谢!
作者您好,我想提一个关于对 采集到的数据处理的一个 小建议 现在的easySpdier默认是将采集到的数据以 csv 的格式储存在文件里,但是大多数时候我们也会有将数据持久到数据库或者别的文件格式的需求,能否提供自定义的持久化方式? 其实持久化到数据库这个操作也可以通过 现在已经提供的 插入js代码来调用其他api 来“间接”实现这个功能(这是我目前能想到的方法)
谢谢建议,这个程序设置的初衷是为那些不会写代码的朋友准备的,没想到发布后会有很多人想要写入数据库这种程序员级别的操作。
因为CSV转DB或者写入SQL数据库这个操作已经有很多开源实现,如:https://github.com/simonw/csvs-to-sqlite
因此这个功能属于边缘功能,大家如果想写入数据库总会找到办法,因此这个功能暂时不会考虑开发。
我倒希望有朋友能提交Pull Request,帮我一起完善这个软件,很遗憾发布了一个多月还没有有效的PR提交,一个人维护一个项目实在有些力不从心,将来我个人的重点也会主要集中在核心功能的开发上,至于写入数据库这种边缘功能,期待有朋友帮我做。
谢谢建议~
还刚下载,对整个项目不熟,后续使用熟练了,有时间就参加一起完善
可以配置paddleOCR吗,Tesseract特殊字体识别效果不太好。
可以配置paddleOCR吗,Tesseract特殊字体识别效果不太好。
下个版本会换成ddddocr,paddleOCR需要自行下载代码更换,因为太重量级了无法直接集成。
需要增加一个增量爬网的功能。
比对已经抓取的数量,重复后停止后续操作。
我有一个需求是这样的,录入新生的学籍信息,一个个手输非常的麻烦,能不能用EasySpider导入execl文件以后逐行读取每个学籍信息填入表单里,然后循环去执行 这里还会涉及到一个学校照片上传的操作,能实现最好了
我有一个需求是这样的,录入新生的学籍信息,一个个手输非常的麻烦,能不能用EasySpider导入execl文件以后逐行读取每个学籍信息填入表单里,然后循环去执行 这里还会涉及到一个学校照片上传的操作,能实现最好了
对于批量填写表单功能,使用0.5.0的以下功能配合Excel读取可实现:
但因为涉及到了图片上传功能,则需要使用自定义操作中的当前环境下执行代码EXEC
功能,配合下面的代码实现:
https://blog.csdn.net/huilan_same/article/details/52439546
需要注意的是EasySpider定位是一个数据采集软件,因此填写表单这种需求并不是软件的核心。
想请问下那种点击按钮下载文件之后的保存路径可以指定吗
想请问下那种点击按钮下载文件之后的保存路径可以指定吗
用带用户信息的浏览器设计和执行,更改浏览器下载目录即可。
如果我想让两个类型的元素并行两列输出怎么实现?(在同类型元素识别不了的情况下) 比如微博发文的作者和发布时间作为两个元素无法实现上述功能 如果分开提取,会生成两列但也不会一一对应,不在同一个循环提取的对应列会自动填充同一元素
我还有一个问题,对于同一个页面,xpath能够定位到所有的元素,为什么还要使用循环去一行一行提取?不能直接提取所有定位到的元素文本吗?
我还有一个问题,对于同一个页面,xpath能够定位到所有的元素,为什么还要使用循环去一行一行提取?不能直接提取所有定位到的元素文本吗?
可以直接提取所有定位到的元素文本,如果不使用循环,则所有的元素文本都会在同一列,一共只有一行。 如果使用循环,参考地震台网,可以生成结构化的多行数据。
根据自己的实际情况来决定使用哪种方式即可。
请问如果某些页面xpath不能进行定位(应该有反爬),有其他方法可以选择吗?
想请问下那种点击按钮下载文件之后的保存路径可以指定吗
用带用户信息的浏览器设计和执行,更改浏览器下载目录即可。
作者你好,我发现这样子在调用任务时还是会恢复默认的下载路径,并不能下载到更改的路径内。并且在翻阅源码时发现在easyspider_executestage.py文件内有写默认下载路径在对应task中,但在实际使用中貌似并没有执行,貌似是bug。
想请问下那种点击按钮下载文件之后的保存路径可以指定吗
用带用户信息的浏览器设计和执行,更改浏览器下载目录即可。
作者你好,我发现这样子在调用任务时还是会恢复默认的下载路径,并不能下载到更改的路径内。并且在翻阅源码时发现在easyspider_executestage.py文件内有写默认下载路径在对应task中,但在实际使用中貌似并没有执行,貌似是bug。
源码里并没有指定文件下载目录,只指定了图片下载目录,因此下载的文件会存在系统默认的下载路径中,如下载文件夹。 如果使用的是带用户信息模式,理论上修改的下载位置会被保存下来,不会有问题。
以下功能会在有空的时候集中开发,大家有什么想要的功能也可以提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等极端网站。
[x] 任务列表排序和搜索。
[x] 拼接后给XPath最终是多少的提示。
[ ] 插件测试,saveData()之前过一个全局插件用来处理数据为其他指定格式,如导入翻译插件(新导包的路径依赖怎么做),试一下是否可以将self.替换成其他的如browser.就可以完成指定任务。
[x] 命令行默认为local模式。
[ ] 数据写入模式中增加文件已存在自动重命名,下载文件同名情况下重命名(多线程测试,keyboard参数测试,采集速度测试,两个相同任务ID同时下载文件测试)。
[ ] cookies池功能。
[x] 自定义操作新增“生成新数据行”,“清空字段值”,“退出程序”的操作。
[ ] 自定义操作新增“切换标签页”,“关闭当前标签页”,“最大化窗口”的操作,循环文本列表同样需要处理标签页。
[x] 试运行JS增加提示返回值功能。
[x] 提取数据操作试运行可以实时显示多数类型的元素提取值。
[x] 字段内容示例值很长时自动换行。
[x] MacOS下循环点击每个链接的Bug修复。
[ ] 判断条件增加多个值,与或都行。
[ ] 操作台增加OCR识别图片选项。
[ ] 下载的图片名称可自定义,用于后续读取图片方便验证码识别等。
[ ] 出一期设计阶段不用自带浏览器设计的教程(不能自动点击和输入文字)。
[ ] 文心一言测试。
[ ] PDF生成。
[ ] 文章生成doc,图片插入到文字中保持顺序不变。
[x] 保存任务提示时间减少。
[ ] 操作备注。
[ ] 循环的XPath也可以使用上层循环做拼接。
[ ] 可选是否加载图片和视频以提高效率。
[x] (Bug修复)打开网页默认应该打开的是链接池的第一个链接。
[x] 双击操作。
[ ] mysql数据去重bug:1054, unknown column '_id' in 'field list'.
[x] 字段设置为常量。
[ ] Shadow-root处理。
[ ] 下载文件是否自动重命名选项。
[ ] 动态调试//text()[1]可以爬到但是动态调试匹配不到
[ ] (在不可优化的情况下,如设置了换行的需求)当一个XPath可以匹配到多个元素时,改变逻辑从只提取第一个匹配到的元素到提取所有匹配到的元素并合并文本。 356.json
[ ] Docker模式下带用户信息模式的Bug修复。
[ ] 操作台关闭后可以重新打开。
[ ] EasySpider主程序没开时,运行执行阶段程序会报错,把这个错误提示出来,即提示用户主程序没开不能使用local的remote功能。
[ ] 用getHTML()来解决shadowroot提取的问题。