OSError:[Errno 24]打开的文件太多

时间:2015-08-24 04:13:15

标签: python selenium screen-scraping selenium-chromedriver

我使用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。有没有其他人遇到过这个,如果有的话,你做了什么修复它?

1 个答案:

答案 0 :(得分:3)

感谢您的建议。

我刚刚意识到browser.close()会关闭窗口,但不会退出chromedriver的实例。由于chromedriver的启动是在提取数据文件的循环中,因此脚本不断打开chromedriver的新实例,最终使我的内存超过200个实例。

对此的简单修复是使用webdriver.quit(),它将完全退出webdriver的实例。

更好的是,不是在每次循环迭代开始时创建一个新实例,而是在循环结束时使用webdriver.get(URL),它会将当前实例重定向到目标URL。

相关问题