Scrapy和Webkit一直在冻结

时间:2014-05-25 14:47:09

标签: python-2.7 webkit scrapy

我正在使用scrapy来抓取一些使用JavaScript的网站。刮刀工作正常,但在随机的地方保持冻结。我需要用ctrl + z来杀死脚本,但是当我使用这个下载器中间件时它只会冻结:

 from scrapy.http import Request, FormRequest, HtmlResponse

    import gtk
    import webkit
    import jswebkit

    class WebkitDownloader( object ):
        def process_request( self, request, spider ):
            if( type(request) is not FormRequest ):
                webview = webkit.WebView()
                webview.connect( 'load-finished', lambda v,f: gtk.main_quit() )
                webview.load_uri( request.url )
                gtk.main()
                js = jswebkit.JSContext( webview.get_main_frame().get_global_context() )
                renderedBody = str( js.EvaluateScript( 'document.documentElement.innerHTML' ) )
                return HtmlResponse( request.url, body=renderedBody )

我尝试通过打印中间件的每一步来调试脚本,但运行正常。当我在终端看到这个时,它会冻结:

Message: console message: http://www.myurl.com/js/Shop.min.js?twsv=20140521122711 @642: JQMIGRATE: Logging is active

我尝试了不同的中间件和下载处理程序,但它总是冻结。我也检查了我的连接,但我看不到任何中断的模式或迹象。我正在使用最新版本的scrapy。

2014-04-25 - 更新

当我确实让它运行几分钟时,我收到此错误: 为GWakeup创建管道:打开文件太多

GLib-ERROR **: Creating pipes for GWakeup: Too many open files

2014-05-27 - 更新

我通过中间件中的每一行代码运行“print”。事实证明,当涉及gtk.main()部分时,它会随机冻结代码和终端。当我在“冻结”期间使用lsof命令时,我可以看到一堆“scrapy”“文件”打开。冻结后我的代码不会再运行,直到我重置我的电脑。我想有一种导致泄漏的错误。

0 个答案:

没有答案