非程序员,只是偶尔喜欢折腾 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
freakxx 2021-11-12 13:32:13 +08:00
@xingshu1990 #1
这种爬虫基本遵循 垂直爬取就好。 你不用把它剔除掉,而是做一个新的表单,来验证是否已经爬取过,这个方向又走到了布隆过滤器。 简单做就是,爬过就放到一个列表,爬取前验证是否已经存在过,就不用爬取, 颗粒度做小的时候,就是验证链接,爬取过的链接不再爬。 这样子是属于逻辑上的优化,尽量地能够让代码是直观的 |
3
freakxx 2021-11-12 13:35:52 +08:00
你可以按照这个思路去玩玩看 o 不 ok
设置两个列表,可以设置状态,pending ,processing ,加多个时间 爬取的时候,就只调用 pending 的出来爬, 爬取的时候把状态从 pending 改为 processing 爬取完之后,把 processing 放到新的列表里,作为存留 再做一个定时器,发现 processing 时间超过 N 但还没完成的,重新调为 pending ,或者做对应相关报错处理 |