Python 列表如何优化

2021-09-18 14:37:57 +08:00
 xingshu1990

职业说明

非程序员,只是偶尔喜欢折腾 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)
		执行爬虫函数或者代码

该思路是否可行?
如不行 是否有更优秀的思路(烦请尽量提供伪代码)

661 次点击
所在节点    Python
3 条回复
xingshu1990
2021-09-22 09:09:10 +08:00
再顶一下,看下有没有人回复。
freakxx
2021-11-12 13:32:13 +08:00
@xingshu1990 #1

这种爬虫基本遵循 垂直爬取就好。

你不用把它剔除掉,而是做一个新的表单,来验证是否已经爬取过,这个方向又走到了布隆过滤器。
简单做就是,爬过就放到一个列表,爬取前验证是否已经存在过,就不用爬取,
颗粒度做小的时候,就是验证链接,爬取过的链接不再爬。

这样子是属于逻辑上的优化,尽量地能够让代码是直观的
freakxx
2021-11-12 13:35:52 +08:00
你可以按照这个思路去玩玩看 o 不 ok

设置两个列表,可以设置状态,pending ,processing ,加多个时间

爬取的时候,就只调用 pending 的出来爬,
爬取的时候把状态从 pending 改为 processing
爬取完之后,把 processing 放到新的列表里,作为存留

再做一个定时器,发现 processing 时间超过 N 但还没完成的,重新调为 pending ,或者做对应相关报错处理

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/802766

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX