V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
xingshu1990
V2EX  ›  Python

Python 列表如何优化

  •  
  •   xingshu1990 · 2021-09-18 14:37:57 +08:00 · 732 次点击
    这是一个创建于 1164 天前的主题,其中的信息可能已经有所发展或是发生改变。

    职业说明

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

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

    xingshu1990
        1
    xingshu1990  
    OP
       2021-09-22 09:09:10 +08:00
    再顶一下,看下有没有人回复。
    freakxx
        2
    freakxx  
       2021-11-12 13:32:13 +08:00
    @xingshu1990 #1

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

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

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

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

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

    再做一个定时器,发现 processing 时间超过 N 但还没完成的,重新调为 pending ,或者做对应相关报错处理
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2710 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 15:25 · PVG 23:25 · LAX 07:25 · JFK 10:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.