
非程序员,只是偶尔喜欢折腾 python,编写非函数式代码。
油漆 -水性金属漆 -金属防腐涂料 -金属型涂料 -车间底漆 -耐高温涂料 -防腐底漆 -水性玻璃漆 -塑胶漆 -调和漆 创建空列表 word =[]
爬虫初始关键词是油漆,采集到了[水性金属漆、塑胶漆、调和漆],传入 word 。
列表内容为 word = ["水性金属漆","塑胶漆","调和漆"]
然后代码从 word 读取"水性金属漆",再传递给爬虫程序,爬取到[金属防腐涂料、防腐底漆、水性玻璃漆、塑料涂料、调和漆] 再传入 word 。
列表因为爬虫程序不断的传关键词进来,代码循环几次后,
列表不断变大,但是每次爬虫只是从中拿出一个数据,如果不人为进行强制中断,是不是人为制造了一个假 死循环。
我目前是初步考虑是用.pop 读删列表中的关键词。
伪代码是:
words = ['油漆','塑胶漆'] if len(words) == 1: word = words.pop() 执行爬虫函数或者代码 else: for i in range(len(words)-1, -1, -1): word = words.pop(i) 执行爬虫函数或者代码 该思路是否可行?
如不行 是否有更优秀的思路(烦请尽量提供伪代码)
1 xingshu1990 OP 再顶一下,看下有没有人回复。 |
2 metamask 2021-11-12 13:32:13 +08:00 @xingshu1990 #1 这种爬虫基本遵循 垂直爬取就好。 你不用把它剔除掉,而是做一个新的表单,来验证是否已经爬取过,这个方向又走到了布隆过滤器。 简单做就是,爬过就放到一个列表,爬取前验证是否已经存在过,就不用爬取, 颗粒度做小的时候,就是验证链接,爬取过的链接不再爬。 这样子是属于逻辑上的优化,尽量地能够让代码是直观的 |
3 metamask 2021-11-12 13:35:52 +08:00 你可以按照这个思路去玩玩看 o 不 ok 设置两个列表,可以设置状态,pending ,processing ,加多个时 爬取的时候,就只调用 pending 的出来爬, 爬取的时候把状态从 pending 改为 processing 爬取完之后,把 processing 放到新的列表里,作为存留 再做一个定时器,发现 processing 时间超过 N 但还没完成的,重新调为 pending ,或者做对应相关报错处理 |