You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让调用WGET的下载函数执行完毕后再启动解析函数?

解决方案

问题出在你用START /B启动wget时,会让wget在后台独立进程运行,Python的os.system会立即返回,导致download_html()函数看似执行完成,实际所有wget还在后台下载,这时调用parse()自然只能解析到已下载的少量文件。

有两种可靠的解决方式,无需手动设置等待时间:

方式一:串行同步下载(简单直接)

去掉START /B参数,让每个wget命令在当前进程中同步执行,只有当一个wget完成所有下载后,才会执行下一个。这样整个download_html()函数会在所有下载完成后才结束,之后再调用parse()就没问题了。

修改后的download_html函数:

def download_html():
    for i in range(20):
        # 移除START /B,让wget同步执行
        os.system(f'wget --compression=gzip -P C:/Users/T/data/data_html -i C:/Users/T/data/data_txt/urls{i}.txt')

方式二:并行下载+等待所有进程完成(效率更高)

如果想保持多进程并行下载提升速度,可以用subprocess模块管理所有wget进程,等待所有进程执行完毕后再继续后续代码。

修改后的代码(需要先导入subprocess):

import subprocess

def download_html():
    # 存储所有wget进程对象
    running_procs = []
    for i in range(20):
        cmd = f'wget --compression=gzip -P C:/Users/T/data/data_html -i C:/Users/T/data/data_txt/urls{i}.txt'
        # 启动后台进程并记录
        proc = subprocess.Popen(cmd, shell=True)
        running_procs.append(proc)
    
    # 等待所有wget进程完成
    for proc in running_procs:
        proc.wait()

额外优化建议

原代码中创建文件夹的逻辑如果遇到文件夹已存在会报错,建议改用os.makedirs并添加exist_ok=True参数,避免重复创建时抛出异常:

def cr_fol_data_txt():
    os.makedirs('C:/Users/T/data/data_txt', exist_ok=True)

def cr_fold_data_html():
    os.makedirs('C:/Users/T/data/data_html', exist_ok=True)

内容的提问来源于stack exchange,提问作者Platothecynic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 12:27:16