ScrapydWeb手动批量删除进程

众所周知,scrapy是一个经典的爬虫框架。但是我不建议大家使用这个框架,首先是这玩意已经是老古董级别,现在很少有围绕它的插件了。而且它还很重,写普通爬虫基本上也不需要使用这个。最重要的是有些公司老是问这个,一点意义都没有的东西老是问。

众所周知的还有scrapy可以使用scrapyd进行部署,通过api可以获取、控制爬虫的状态。于是有这么一个web可视化的框架scrapydWeb,专门用来可视化处理scrapyd,目前是年更一次的水平。

这个框架的出发点是好的,但是功能是不好用的。不得不品的就是他的删除进程功能,可以说是没有的。有些时候爬虫会出现长时间的N/A,或者获取不到item,这个时候你想删除这些进程,但是你会发现它不支持批量删除,它的进程状态都在数据库里面存着,去操作也很麻烦,只好一个一个删。

问题是它删一次就刷新一次页面,定时任务又会因为消耗的太慢堆积的非常多导致非常卡,更重要的是Forcestop根本杀不掉进程。。

于是就有了下面这段简单代码来帮忙:

a = """
library	wk:xxx  task_45_2025-02-14T06_00_00	2561977	03-31 22:04:10	2 days, 12:01:47	N/A	N/A	 Stats	Log	 Stop	Forcestop
library	wk:xxx	task_46_2025-02-14T06_20_00	2621044	04-01 00:43:25	2 days, 9:22:32	N/A	N/A	 Stats	Log	 Stop	Forcestop
library	wk:xxx	task_47_2025-02-14T06_40_00	2652661	04-01 02:09:00	2 days, 7:56:57	3210 0	 Stats	Log	 Stop	Forcestop
"""
b = a.split('\n')
d = [c.split('\t')[3] for c in b if c and ("N/A" in c or "\t0\t" in c)]
[print(f'kill -9 {e}') for e in d]

我们要做的就是手动复制文本

放到a变量里面运行一下,就可以得到items为N/A或者为0的情况的进行pid,直接复制kill -9 命令去手动删除

这样就能把卡住的爬虫全都扬咯


评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注