现在页面用ajax的越来越多, 好多代码是通过js执行结果显示在页面的, 所以在scrapy抓取过程中就需要通过一个中间件来执行这个js代码,
这个可以通过scrapy webkit来完成.
安装scrapy:
sudo apt-get install python-scrapy(貌似安装的版本比较低)需要修改一下, 具体步骤访问下面的网址
http://doc.scrapy.org/en/latest/topics/ubuntu.html#topics-ubuntu
webkit的安装:
sudo apt-get install python-webkit
安装xvfb, 用于非Xwindows环境下
sudo apt-get install xvfb
开发downloader middleware
from scrapy.http import Request, FormRequest, HtmlResponse
import gtk
import webkit
import jswebkit
import settings
class WebkitDownloader( object ):
def process_request( self, request, spider ):
if spider.name in settings.WEBKIT_DOWNLOADER:
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.body.innerHTML' ) )
return HtmlResponse( request.url, body=renderedBody )
配置
在scrapy的settings.py中加入:
#which spider should use WEBKIT
WEBKIT_DOWNLOADER=['ccb']
DOWNLOADER_MIDDLEWARES = {
'rate_crawler.dowloader.WebkitDownloader': 543,
}
import os
os.environ["DISPLAY"] = ":0"
启动 Xvfb (假设DISPLAY=:0)
要与settings.py中的DISPLAY对应(本例中是:0)。
scrapy crawl xxx