如何在Ubuntu中释放Python脚本驱动的Selenium WebDriver缓存?
问题
使用Selenium WebDriver24小时不间断爬取网站数据时,发现缓存占用空间持续增长,路径/tmp/snap-private-tmp/snap.chromium/tmp已占用4879M。
我的Python脚本scrap.py如下:
from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.service import Service from selenium.common.exceptions import WebDriverException from time import sleep options = Options() options.add_argument('--headless') options.add_argument('--disable-gpu') options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') driver = webdriver.Chrome(service=Service(), options=options) driver.get("https://example.com/") sleep(3) html = driver.page_source soup = BeautifulSoup(html, features='html.parser')
我通过以下命令循环执行该脚本1000次(我知道这种方式不够合理):
for run in {1..1000}; do python scrap.py; done
请问如何释放脚本执行后占用的磁盘空间?直接删除该文件夹内的内容即可吗?
目前我使用以下命令清理修改时间超过1天的缓存,已清理4GB数据:
sudo find /tmp/snap-private-tmp/snap.chromium/tmp/ -name '.org.chromium.Chromium*' -type d -mtime +0 -exec rm -rf {} +
解决方案
1. 先修复脚本的核心问题
你的脚本未关闭Chrome驱动实例,每次执行都会启动新的Chrome进程,对应的缓存目录不会自动清理,这是磁盘占用暴涨的根源。在脚本末尾添加关闭驱动的代码:
# ... 原有数据处理代码完成后 ... driver.quit() # 彻底关闭浏览器实例,清理所有关联的缓存和进程
用driver.quit()而非driver.close(),前者会终止整个Chrome进程,确保缓存资源被完全释放。
2. 缓存目录的清理说明
直接删除/tmp/snap-private-tmp/snap.chromium/tmp下的.org.chromium.Chromium*目录是安全的——这些是Chrome每次启动生成的临时缓存文件夹,只要当前没有运行的Chrome爬虫实例,删除不会影响系统或后续爬取。
你当前使用的find清理命令是有效的,但修复脚本后,新生成的缓存会在脚本结束后被Chrome自动清理,无需频繁手动执行清理操作。
3. 优化爬取方式(避免重复启动浏览器)
循环执行脚本的效率极低,每次都要启动/关闭Chrome,建议改成单脚本内循环爬取,复用同一个浏览器实例:
from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.service import Service from time import sleep from bs4 import BeautifulSoup # 补充原脚本缺失的导入 options = Options() options.add_argument('--headless') options.add_argument('--disable-gpu') options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') # 可选:禁用缓存进一步减少磁盘占用 options.add_argument('--disable-cache') options.add_argument('--disk-cache-size=0') driver = webdriver.Chrome(service=Service(), options=options) try: # 循环1000次爬取 for _ in range(1000): driver.get("https://example.com/") sleep(3) html = driver.page_source soup = BeautifulSoup(html, features='html.parser') # 这里添加你的数据处理、存储逻辑 finally: # 无论是否出错,最后都关闭驱动 driver.quit()
这种方式不仅能大幅提升爬取效率,还能从根源上减少临时缓存目录的生成。
内容的提问来源于stack exchange,提问作者Raptor
相关产品推荐
相关产品推荐

