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