點擊加載圖片 本文由 知行合一博客 授權發(fā)布,版權所有歸作者,轉載請聯(lián)系作者! 最近在學習python語言,python以前沒有接觸,只用過perl,以前使用perl做一些大的數(shù)據(jù)集處理,當時也是比較生疏,所以一上來看了簡單的官方說明文檔,就馬上開始coding,大約一周基本就對perl的特性比較熟悉了。所以這次我秉持著從實踐中學習技術的角度,打算用python做一些小程序,順便熟悉python語言的各個方面的特性,也因為我對網(wǎng)絡爬蟲一直都很有些興趣,就打算著手做個小工具。 使用python做網(wǎng)絡爬蟲,網(wǎng)上的資源很多,我搞不清為什么很多人和機構都熱衷于用python做網(wǎng)絡爬蟲,大概是因為python在這方面提供的支持庫比較多也比較容易實現(xiàn)吧?,F(xiàn)有的比較典型的開源爬蟲架構如scrapy(python實現(xiàn)),其實現(xiàn)的功能已經(jīng)比較全面了,最早的時候想了解網(wǎng)絡爬蟲的原理的時候,曾經(jīng)嘗試過使用scrapy定制,scrapy已經(jīng)實現(xiàn)了比較復雜的爬蟲功能,官方文檔也介紹的很詳細。不過為了滿足我重復造輪子的好奇心,決定自己做一下,多給腦子里填一些東西 python實現(xiàn)網(wǎng)絡爬蟲的原理和架構網(wǎng)上資源很多,我就不在這里贅述,大家可以參考這些個鏈接了解: 1.如何入門網(wǎng)絡爬蟲? 2.你是如何開始能寫python爬蟲? 用python 3做網(wǎng)絡爬蟲可以使用基本的http庫也可以使用urllib(注意在python2.7.*以前都是urllib2,更新后urllib2被丟棄)這種庫提供對網(wǎng)頁url的處理模塊。網(wǎng)上充斥著大量的爬蟲教程絕大多數(shù)部分描述的是使用python2 +urllib2庫。使用python3做爬蟲還比較少,基本原理是一樣的,不過就是urlib庫里一些功能的實現(xiàn)和老版本的庫稍有不同。 簡單的使用urllib抓取網(wǎng)頁的例子如下: 點擊加載圖片 urllib的具體使用接口和方法參加官方文檔,這里不再詳述。 對于網(wǎng)絡爬蟲最很重要的一環(huán),網(wǎng)頁頁面HTML的處理方法,python官方給出了一些標準庫,不過有一個第三方庫beautiful soup對抓取的網(wǎng)頁分析更加方便,本文所述的程序采用這個庫做HTML頁面分析和處理。 爬蟲關鍵的就是性能問題,影響性能的原因一個是因為爬蟲程序搜索網(wǎng)頁的邏輯本身耗時,另一個是抓取頁面響應時的耗時,前一種耗時可以采用python標準庫中的多線程對爬蟲程序進行優(yōu)化,提取主頁中的關鍵URL采用多個爬蟲線程進行爬取。針對后一種耗時,可以采用集群的方式對爬蟲進行優(yōu)化,不過本文研究的程序僅僅作為一種學習,不深入討論。這里指給出優(yōu)化的一小部分,python多線程的實例如下: 點擊加載圖片 本文描述的爬蟲主要功能是在給定的某個主頁下進行廣度搜索,找到子頁面和父頁面中包含的所有pdf和doc/docx文檔并下載。之所以做這樣的一個工具是因為最近在看一些論文,經(jīng)常一些學術性網(wǎng)站會放出論文的pdf版本,不過由于pdf文件在網(wǎng)頁中分布比較分散,手工下載起來比較麻煩,因此嘗試自動爬取網(wǎng)頁中的這些資源,然后再逐個檢索。 爬蟲的GUI框架使用Tkinter,Tkinter支持很多語言,比如ruby,perl,python等,是一個比較簡單圖形界面庫,之所以不采用其他第三方GUI框架是因為這些框架很多只支持python2.7.*以前的版本,而我這里用的python3.4.1,無奈選擇了最方便的方法。 下面是程序的界面: 點擊加載圖片 下載文件的存儲路徑在設置按鈕內設置,界面真心丑,不過能用… End. |
|