zg手冊 之 scrapy 開發(4)-- javascript 動態頁面的抓取

javascript 動態頁面

目前許多網站大量運用js腳本進行一些頁面的處理,這些頁面的抓取對爬蟲是個挑戰。 這類頁面的抓取,我用到了下面的方法javascript

  1. 分析頁面(firebug/chrome調試工具 等),找到ajax獲取的數據源,看是否能夠直接發請求獲取java

  2. 調用瀏覽器引擎(webkit)獲取最後 js 執行過完成的頁面python

  3. 調用無界面依賴的瀏覽器引擎(headless browser) casperjs,phantomjs 獲取最後的頁面web


使用 webkit 抓取

安裝須要的軟件ajax

# Xvfb 模擬 Xwindows
sudo apt-get install xvfb
# 安裝 python webkit包

添加增長下面的下載代碼(增長的位置我後面說明)chrome

webview = webkit.WebView()
webview.connect( 'load-finished', lambda v,f: gtk.main_quit() )
webview.load_uri( request.url )
gtk.main()
renderedBody = str(webview.execute_script('document.documentElement.innerHTML'))
# renderedBody 是執行後頁面的內容

注意的上面的代碼我沒有說明寫在哪裏,網上不少例子都是說寫 下載中間件(DownloaderMiddleware)裏,這是有些問題的windows

  1. scrapy 是基於twisted的異步網絡框架。若是下載中間件中長時間阻塞,就會阻塞整個異步處理流程瀏覽器

  2. scrapy 自己的下載 delay 功能,是在中間件下面一層生效(中間件和下載器之間),也就是說若是在下載中間件這裏中斷處理流程,下載時間間隔功能將失去做用。網絡

  3. 還有一個問題就是 上面的方案須要啓動模擬的 x-server (xvfb)框架


目前的方案

  1. casperjs,phantomjs 無界面瀏覽器(headless browser)

  2. 寫一個 scrapy 的 下載handler,這是scrapy支持的插件,而且不影響其餘框架功能的運行,下載器的開發我會在下一篇講一下


原文連接: http://www.hopez.org/blog/9/1396371345

相關文章
相關標籤/搜索