fedora環境安裝webkit支援作爬蟲下載解析JS

CL.TANG發表於2013-12-07

環境:

  我使用的fedora19.1-xfce版本,屬於redhat系的桌面環境。

1.安裝

  webkit原始碼安裝webkit失敗,這裡提供的是yum安裝方式。

  a.檢視當前yum庫中的webkit資源:

    

[root@localhost pythontest]# yum list webkit*
已載入外掛:langpacks
已安裝的軟體包
webkit-sharp.x86_64                                                  0.3-10.fc19                                              @fedora 
webkit-sharp-devel.x86_64                                            0.3-10.fc19                                              @fedora 
webkitgtk.x86_64                                                     2.0.4-1.fc19                                             @updates
webkitgtk-devel.x86_64                                               2.0.4-1.fc19                                             @updates
webkitgtk-doc.noarch                                                 2.0.4-1.fc19                                             @updates
webkitgtk3.x86_64                                                    2.0.4-1.fc19                                             @updates
webkitgtk3-devel.x86_64                                              2.0.4-1.fc19                                             @updates
webkitgtk3-doc.noarch                                                2.0.4-1.fc19                                             @updates
可安裝的軟體包
webkit-sharp-devel.i686                                              0.3-10.fc19                                              fedora  
webkitgtk.i686                                                       2.0.4-1.fc19                                             updates 
webkitgtk-devel.i686                                                 2.0.4-1.fc19                                             updates 
webkitgtk3.i686                                                      2.0.4-1.fc19                                             updates 
webkitgtk3-devel.i686                                                2.0.4-1.fc19                                             updates 
[root@localhost pythontest]# 

這裡展現的是我當前系統已經安裝了的很沒有安裝的與webkit有關的庫,當然安裝了的也是我我在寫這篇部落格前安轉webkit的結果,如果你的系統不是64位的,請選擇那些i684的包

安裝庫:

yum install webkitgtk.x86_64 webkit-sharp.x86_64  webkit-sharp-devel.x86_64 webkitgtk.x86_64  webkitgtk-devel.x86_64

  這裡安裝完成後匯入了webkit的動態連線庫。可以使用具體的某門語言來調他們的介面實現功能。這裡使用的是python

 

需要有3個支援庫:

import gtk
import webkit
import jswebkit

 webkit庫使用的原始碼安裝,jswebkit使用的rpm安裝

webkit庫:

https://code.google.com/p/pywebkitgtk/downloads/list

執行:

./configure
make
make install

在上面的./configure過程中可能提示某些庫不存在,比如

  No package 'pygtk-2.0' found

執行:  

yum install gtk2.x86_64 gtk2-devel.x86_64  gtk2-engines.x86_64 gtk2-engines-devel.x86_64 gtk2-immodule-xim.x86_64 

 

./configure執行成功後,在執行make && make install,

然後檢視webkit庫是否安裝成功:

[root@localhost pythontest]# python
Python 2.7.5 (default, Nov 12 2013, 16:18:42)
[GCC 4.8.2 20131017 (Red Hat 4.8.2-1)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import webkit
>>> dir(webkit)
['DOWNLOAD_ERROR_CANCELLED_BY_USER', 'DOWNLOAD_ERROR_DESTINATION', 'DOWNLOAD_ERROR_NETWORK', 'DOWNLOAD_STATUS_CANCELLED', 'DOWNLOAD_STATUS_CREATED', 'DOWNLOAD_STATUS_ERROR', 'DOWNLOAD_STATUS_FINISHED', 'DOWNLOAD_STATUS_STARTED', 'Download', 'DownloadError', 'DownloadStatus', 'EDITING_BEHAVIOR_MAC', 'EDITING_BEHAVIOR_UNIX', 'EDITING_BEHAVIOR_WINDOWS', 'EditingBehavior', 'LOAD_COMMITTED', 'LOAD_FAILED', 'LOAD_FINISHED', 'LOAD_FIRST_VISUALLY_NON_EMPTY_LAYOUT', 'LOAD_PROVISIONAL', 'LoadStatus', 'NAVIGATION_RESPONSE_ACCEPT', 'NAVIGATION_RESPONSE_DOWNLOAD', 'NAVIGATION_RESPONSE_IGNORE', 'NETWORK_ERROR_CANCELLED', 'NETWORK_ERROR_FAILED', 'NETWORK_ERROR_FILE_DOES_NOT_EXIST', 'NETWORK_ERROR_TRANSPORT', 'NETWORK_ERROR_UNKNOWN_PROTOCOL', 'NavigationResponse', 'NetworkError', 'NetworkRequest', 'NetworkResponse', 'PLUGIN_ERROR_CANNOT_FIND_PLUGIN', 'PLUGIN_ERROR_CANNOT_LOAD_PLUGIN', 'PLUGIN_ERROR_CONNECTION_CANCELLED', 'PLUGIN_ERROR_FAILED', 'PLUGIN_ERROR_JAVA_UNAVAILABLE', 'PLUGIN_ERROR_WILL_HANDLE_LOAD', 'POLICY_ERROR_CANNOT_SHOW_MIME_TYPE', 'POLICY_ERROR_CANNOT_SHOW_URL', 'POLICY_ERROR_CANNOT_USE_RESTRICTED_PORT', 'POLICY_ERROR_FAILED', 'POLICY_ERROR_FRAME_LOAD_INTERRUPTED_BY_POLICY_CHANGE', 'PluginError', 'PolicyError', 'SecurityOrigin', 'WEB_NAVIGATION_REASON_BACK_FORWARD', 'WEB_NAVIGATION_REASON_FORM_RESUBMITTED', 'WEB_NAVIGATION_REASON_FORM_SUBMITTED', 'WEB_NAVIGATION_REASON_LINK_CLICKED', 'WEB_NAVIGATION_REASON_OTHER', 'WEB_NAVIGATION_REASON_RELOAD', 'WEB_VIEW_TARGET_INFO_HTML', 'WEB_VIEW_TARGET_INFO_IMAGE', 'WEB_VIEW_TARGET_INFO_NETSCAPE_URL', 'WEB_VIEW_TARGET_INFO_TEXT', 'WEB_VIEW_TARGET_INFO_URI_LIST', 'WebBackForwardList', 'WebDataSource', 'WebDatabase', 'WebFrame', 'WebHistoryItem', 'WebInspector', 'WebNavigationAction', 'WebNavigationReason', 'WebPolicyDecision', 'WebResource', 'WebSettings', 'WebView', 'WebViewTargetInfo', 'WindowFeatures', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 'get_default_web_database_quota', 'get_web_database_directory_path', 'gobject', 'remove_all_web_databases', 'set_default_web_database_quota', 'set_web_database_directory_path', 'webkit']
>>>

這裡可以看到webkit庫的各個屬性都出來了,說明他安裝成功了。但是可能你出錯了,因為按照預設的python的webkit庫的安裝路徑會在:

/usr/local/lib64/python2.7/site-packages/webkit

 這不是系統當前預設查詢的庫路徑,需要設定PYTHONPATH

expoort $PYTHONPATH='/usr/local/lib64/python2.7/site-packages/'

然後才能正常使用。

 

接下來安裝jswebkit.

jswebkit是一個rpm,非常好安裝,下載路徑:

http://rpm.pbone.net/index.php3/stat/4/idpl/23804518/dir/fedora_19/com/python-jswebkit-0.0.3-5.1.x86_64.rpm.html

這裡我提供

下載後直接使用:

rpm -ivh python-jswebkit-0.0.3-5.1.x86_64.rpm

  安裝後同前面的webkit庫一樣檢查是否安裝成功。

經過上面的步驟,webkit和他的python支援安裝完成。

 

2. 測試:

a:(檔名cc.py)

import gtk 
import webkit  

view = webkit.WebView() 
sw = gtk.ScrolledWindow() 
sw.add(view) 

win = gtk.Window(gtk.WINDOW_TOPLEVEL) 
win.add(sw) 
win.show_all() 
view.open("http://w3.org/") 
gtk.main()

結果會開啟一個簡易視窗.

但是並沒有達到我們作為爬蟲要解析JS的目的:

 

b:(檔名dd.py)

import sys 
import gtk 
import webkit
import jswebkit

def get(url):
    webview = webkit.WebView()
    webview.connect( 'load-finished', lambda v,f: gtk.main_quit() )
    webview.load_uri(url)
    gtk.main()
    js = jswebkit.JSContext( webview.get_main_frame().get_global_context() )
    renderedBody = str( js.EvaluateScript( 'document.body.innerHTML' ) ) 
    print renderedBody
    with open("temp", "wb") as f:
        f.write(renderedBody)                                                                                                         

if __name__ == "__main__":
    url = sys.argv[1]
    get(url)

這端程式碼我們可以測試出現在的爬蟲是否能解析JS:

使用wget http://www.taobao.com/

得到檔案index.html

使用python dd.py http://www.taobao.com/

 

執行後結果:

[root@localhost pythontest]# ll
總用量 76
-rw-r--r--. 1 root root   365 12月  7 18:29 cc.py
-rw-r--r--. 1 root root   507 12月  7 16:58 dd.py
-rw-r--r--. 1 root root   505 12月  7 16:57 dd.py~
-rw-r--r--. 1 root root 36934 12月  7 17:02 index.html
-rw-r--r--. 1 root root 43492 12月  7 18:14 temp

可以看到,wget獲得的淘寶檔案為36934,而使用webkit下載的淘寶首頁43492,大小不一直,使用瀏覽器開啟index.html,可以看到有的地方一直處於載入狀態,而temp檔案沒有這種情況,所以,當前這個webkit爬蟲是解析js獲得的內容.

 

 

相關文章