2015-08-24 76 views
1

我使用python和selenium来抓取一个完整的文本文件(如URL),然后使用请求来获取这些txt文件。OSError:[Errno 24]太多打开的文件

我正在使用的代码如下:

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奇下载/ reqests之后,脚本错误

终止OSERROR。 [Errno 24]打开太多文件。

我已确认正在写入的文件已关闭。硒同样如此,每次下载文本文件后,chromedriver关闭,循环移至下一个URL。有没有其他人遇到过这种情况,如果是的话,你做了什么来解决它?

+0

你可以请发布完整的追踪,这将包括错误是从哪个行抛出? –

+0

这可能是一个愚蠢的问题,但是有没有你不使用wget的原因? –

+0

@AnandSKumar:没有回溯,这是我认为系统抛出的错误,而不是python。 –

回答

2

感谢您的建议。

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

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

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

+1

我在这里参加聚会的时间已晚,但是Python模块像''robobrowser''(基本上模仿Ruby的''mechanize'''可以填充表单,它们比''selenium''更快,更不容易出问题。“Selenium''确实只有当网站具有修改DOM的JavaScript(即OuterHTML,而不是源HTML)时才是必需的。 – prooffreader

相关问题