<wbr id="juant"></wbr>
  • <wbr id="juant"></wbr>
    更多課程 選擇中心


    Python培訓

    400-111-8989

    Python實現一個帶圖形界面的爬蟲

    • 發布: DHC
    • 來源:時空密語
    • 時間:2017-12-11 16:44

    Python 是一個很簡介高效的語言,許多的 Python 愛好者(包括我在內)都很喜歡用 Python 做爬蟲,為什么會喜歡寫爬蟲,我對爬蟲的感覺就是:它能給我帶來無限的數據,看著數據一點一點地從網絡上保存下來,內心肯定是激動的,感覺每條數據都是一筆錢。當然絕大部分人都不會只爬數據而不做其他的一些處理,因為這么多的數據擺在你面前,它卻對你沒有用處,所以爬蟲獲取到的數據有的會被進行處理之后做成網站,更多的是對數據進行分析,由于數據分析在企業中的作用很大,所以數據分析師一直都是一個熱門的職業。在我之前發的文章中,大部分也是爬蟲,但是這幾個爬蟲都存在很大的問題,就是爬蟲的目標不方便修改,我們通常需要對特定主體的數據進行爬取,而爬蟲又不只是一次性的程序,所以需要經常修改爬蟲的目標,而我之前做的爬蟲都沒有直觀的方式修改目標,每次修改都需要對程序進行改寫,這樣做很容易使得程序運行出錯,于是今天的爬蟲將會具有圖形化用戶界面,可以直觀地指定爬蟲目標。

    Python 擁有長久的發展歷史,GUI 編程也毫不遜色,Python 中有幾個常見的圖形庫。簡單介紹一下:

    Tkinter: Tkinter 模塊(Tk 接口)是 Python 的標準 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多數的 Unix 平臺下使用,同樣可以應用在 Windows 和 Macintosh 系統里。Tk8.0 的后續版本可以實現本地窗口風格,并良好地運行在絕大多數平臺中。

    wxPython:wxPython 是一款開源軟件,是 Python 語言的一套優秀的 GUI 圖形庫,允許 Python 程序員很方便的創建完整的、功能鍵全的 GUI 用戶界面。

    Jython:Jython 程序可以和 Java 無縫集成。除了一些標準模塊,Jython 使用 Java 的模塊。Jython 幾乎擁有標準的Python 中不依賴于 C 語言的全部模塊。比如,Jython 的用戶界面將使用 Swing,AWT或者 SWT。Jython 可以被動態或靜態地編譯成 Java 字節碼。

    以上簡介摘自菜鳥編程

    介紹完 Python 的 GUI 圖形庫,接下來來介紹一下本文要寫的爬蟲:

    本文的爬蟲目標網站是百度百科,百度百科上面對于大多數關鍵詞都用統一的格式拼接 URL,并且最重要的一點就是百科詞條的主要內容可以直接通過 HTML 獲取,沒有經過一些 js 渲染,大幅減少了編寫爬蟲的難度和復雜度。本爬蟲使用的圖形庫是 Tkinter,這個圖形庫使用起來簡單,缺點就是控件太少,難以做出太復雜又多功能的圖形界面,不過這沒關系,本爬蟲只用到了極少的接口。爬蟲 95% 的代碼都是實現爬蟲邏輯和框架的,所以 Tkinter 的缺點并不影響。

    看一下爬蟲簡陋的 GUI 界面吧:

    主要的作用是需要爬取的百科詞條可以在文本框內填寫,并可以一次填寫多項。

    由于版面有限,本文只講解有特點的地方,完整的源代碼可以在 Github 上查看并下載運行:https://github.com/JIMhackKING/BaikeSpider,運行時只要在文件夾所在命令行輸入:

    >python BaikeSpider

    爬蟲可以一次爬取多個關鍵詞,只需要用逗號或分號隔開就行,并且符號不分中英文,這就方便了中英文輸入時可以不需要切換中英文符號。實現的代碼:

    # __mian__.pyre.split(r"[;,;,]".decode("utf-8"), s)

    用正則表達式就可以實現了,無論是一種符號輸入還是多種符號混合輸入都可以正確處理并分割字符串,獲取到所有的關鍵詞。這里要對正則表達式語法里面的中文符號進行解碼,因為從 Tkinter 的文本輸入框控件中獲取到的字符串是 Unicode 編碼的,如果不處理會導致分割了錯的字符串。

    在爬蟲主調度類 SpiderMain 中,實現了兩個方法:

    class SpiderMain(object): # 單線程爬蟲 def craw(self, root_url, count): ... # 多線程爬蟲 def thread_craw(self, root_url, count): ...

    這兩個方法都是爬蟲的主調度方法,兩個方法的主邏輯相同,只不過一個是單線程運行爬蟲,另一個是多線程運行爬蟲,多線程的爬蟲方法中,內嵌了三個函數:

    def thread_craw(self, root_url, count): def _put_url(): '''向隊列中寫入新的 URL ''' ... def _download(): '''從 URL 隊列中提取一個 URL 并下載''' ... def _parse(): '''從 HTML 隊列中提取 HTML 并解析''' ...

    這三個函數的作用在文檔字符串中也已經說明了,爬蟲一共用到了兩個隊列,一個用于存儲將要被爬取的 URL,另一個用于存儲待解析的 HTML 文檔,之后分別創建三個線程運行這三個函數,這樣可以使得獲取并下載 HTML 和解析 HTML 可以同時進行,減少了大量的 IO 等待時間,并且下載函數使用了五個線程,也就是有五個線程同時下載 HTML ,這可以快速地解決掉大量的待爬取 URL。

    由于篇幅有限,本篇爬蟲的介紹就到此為止了,其實本文對爬蟲的介紹在代碼中都已經詳細地進行注釋說明了,以文字來介紹并講解一個項目是有難度的,所以最好的閱讀方式就是邊閱讀代碼邊練習,并通過注釋了解每一段代碼的作用。

    本文內容轉載自網絡,來源/作者信息已在文章頂部表明,版權歸原作者所有,如有侵權請聯系我們進行刪除!

    預約申請免費試聽課

    填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

    上一篇:Mac 下如何搭建管理 Python 開發環境
    下一篇:Python入門——函數參數篇

    2021年Python面試題及答案匯總詳解

    python數據分析,你需要這些工具

    Python培訓講解二叉樹的三種深度

    Python培訓:如何實現窮舉搜索?

    • 掃碼領取資料

      回復關鍵字:視頻資料

      免費領取 達內課程視頻學習資料

    • 視頻學習QQ群

      添加QQ群:1143617948

      免費領取達內課程視頻學習資料

    Copyright ? 2021 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

    選擇城市和中心
    黑龍江省

    吉林省

    河北省

    湖南省

    貴州省

    云南省

    廣西省

    海南省

    天天日天天射天天干天天伊|奇米电影|奇米网_奇米首页|奇米首页 百度 好搜 搜狗
    <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>