• fedora环境安装webkit支持作爬虫下载解析JS


    环境:

      我使用的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获得的内容.

  • 相关阅读:
    jquery操作删除元素
    js添加页面元素
    jQuery方法
    form表单的几种提交方式
    Comparable和Comparator
    快速失败和安全失败
    Junit 测试基础
    Spring 之AOP 面向切面编程
    spring 的核心接口
    Nginx
  • 原文地址:https://www.cnblogs.com/CLTANG/p/3463067.html
Copyright © 2020-2023  润新知