Python 2.7 Scrapy和Webkit一直冻结
我正在使用scrapy用JavaScript抓取一些网站。铲运机工作正常,但在任意地方都会结冰。我需要用ctrl+z终止脚本,但它只有在我使用这个下载程序中间件时才会冻结:Python 2.7 Scrapy和Webkit一直冻结,python-2.7,webkit,scrapy,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 ): de
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-更新
我对中间件中的每一行代码都进行了“打印”。当涉及到gtk.main()部分时,它会随机冻结代码和终端。当我在“冻结”期间使用lsof命令时,我可以看到一堆打开的“碎片”文件。冻结后,我的代码不会再次运行,直到我重置我的计算机。我想可能是某种错误导致了泄漏 我不知道你的gtk问题的解决方案,但是如果你想我有一些代码来解决这个javascript问题。嗨,WebkitDownloader解决方案从一开始就是有缺陷的。请与Scrapy一起使用飞溅。请考虑从你的解决方案中做出适当的反应,简单的可能是: