我使用python和selenium来抓取一个充满文本文件的网站(如网址),然后使用请求获取这些txt文件。
我使用的代码如下:
r = requests.get(link,cookies=cookies)
# Checking for a successful connection to the server.
if r.status_code == 200:
print("Downloading data for time %d, altitude %d" %(counter1, altitude) )
data = r.text # Extracting the text from the file online
file_name = os.path.join(path,fileName)
with open(file_name, 'w') as w:
w.write(data)
w.closed
# Closing browser
browser.close()
有大约900个奇怪的文件要下载,但是每下载250个奇数后,脚本会以错误结束
OSERROR。 [Errno 24]打开的文件过多。
我已确保正在写入的文件已关闭。对于selenium也是如此,在下载每个文本文件后,chromedriver关闭,循环移动到下一个URL。有没有其他人遇到过这个,如果有的话,你做了什么修复它?
答案 0 :(得分:3)
感谢您的建议。
我刚刚意识到browser.close()会关闭窗口,但不会退出chromedriver的实例。由于chromedriver的启动是在提取数据文件的循环中,因此脚本不断打开chromedriver的新实例,最终使我的内存超过200个实例。
对此的简单修复是使用webdriver.quit(),它将完全退出webdriver的实例。
更好的是,不是在每次循环迭代开始时创建一个新实例,而是在循环结束时使用webdriver.get(URL),它会将当前实例重定向到目标URL。