Python分布式爬蟲原理解析之用python開發爬蟲功能

轉自:http://www.cnblogs.com/arxive/p/6194369.html

首先,我們先來看看,如果是人正常的行為,是如何獲取網頁內容的。

(1)打開瀏覽器,輸入URL,打開源網頁

(2)選取我們想要的內容,包括標題,作者,摘要,正文等信息

(3)存儲到硬盤中

上面的三個過程,映射到技術層面上,其實就是:網絡請求,抓取結構化數據,數據存儲。

我們使用Python寫一個簡單的程序,實現上面的簡單抓取功能。

[python]view plaincopy

#!/usr/bin/python#-*-?coding:?utf-8?-*-''Created?on?2014-03-16

@author:?Kris

'''importdef'''

@summary:?網頁抓取

'''def'''

@summary:?網絡請求

'''try

,)

,)

finallyifreturndef'''

@summary:?抓取結構化數據

'''

if]

returndef'''

@summary:?數據存儲

''',)

if:

httpCrawler(url)

看著很簡單,是的,它就是一個爬蟲入門的基礎程序。當然,在實現一個采集過程,無非就是上面的幾個基礎步驟。但是實現一個強大的采集過程,你會遇到下面的問題:

(1)需要帶著cookie信息訪問,比如大多數的社交化軟件,基本上都是需要用戶登錄之后,才能看到有價值的東西,其實很簡單,我們可以使用Python提供的cookielib模塊,實現每次訪問都帶著源網站給的cookie信息去訪問,這樣只要我們成功模擬了登錄,爬蟲處于登錄狀態,那么我們就可以采集到登錄用戶看到的一切信息了。下面是使用cookie對httpRequest()方法的修改:

[python]view plaincopy

ckjar?=?cookielib.MozillaCookieJar()

def'''

@summary:?網絡請求

'''try

,)

,)

finallyifreturnret

(2)編碼問題。網站目前最多的兩種編碼:utf-8,或者gbk,當我們采集回來源網站編碼和我們數據庫存儲的編碼不一致時,比如,163.com的編碼使用的是gbk,而我們需要存儲的是utf-8編碼的數據,那么我們可以使用Python中提供的encode()和decode()方法進行轉換,比如:

[python]view plaincopy

content?=?content.decode(,)

,)

中間出現了unicode編碼,我們需要轉為中間編碼unicode,才能向gbk或者utf-8轉換。

(3)網頁中標簽不完整,比如有些源代碼中出現了起始標簽,但沒有結束標簽,HTML標簽不完整,就會影響我們抓取結構化數據,我們可以通過Python的BeautifulSoup模塊,先對源代碼進行清洗,再分析獲取內容。

(4)某些網站使用JS來生存網頁內容。當我們直接查看源代碼的時候,發現是一堆讓人頭疼的JS代碼。可以使用mozilla、webkit等可以解析瀏覽器的工具包解析js、ajax,雖然速度會稍微慢點。

(5)圖片是flash形式存在的。當圖片中的內容是文字或者數字組成的字符,那這個就比較好辦,我們只要利用ocr技術,就能實現自動識別了,但是如果是flash鏈接,我們將整個URL存儲起來了。

(6)一個網頁出現多個網頁結構的情況,這樣我們如果只是一套抓取規則,那肯定不行,所以需要配置多套模擬進行協助配合抓取。

(7)應對源網站的監控。抓取別人的東西,畢竟是不太好的事情,所以一般網站都會有針對爬蟲禁止訪問的限制。

一個好的采集系統,應該是,不管我們的目標數據在何處,只要是用戶能夠看到的,我們都能采集回來。所見即所得的無阻攔式采集,無論是否需要登錄的數據都能夠順利采集。大部分有價值的信息,一般都需要登錄才能看到,比如社交網站,為了應對登錄的網站要有模擬用戶登錄的爬蟲系統,才能正常獲取數據。不過社會化網站都希望自己形成一個閉環,不愿意把數據放到站外,這種系統也不會像新聞等內容那么開放的讓人獲取。這些社會化網站大部分會采取一些限制防止機器人爬蟲系統爬取數據,一般一個賬號爬取不了多久就會被檢測出來被禁止訪問了。那是不是我們就不能爬取這些網站的數據呢?肯定不是這樣的,只要社會化網站不關閉網頁訪問,正常人能夠訪問的數據,我們也能訪問。說到底就是模擬人的正常行為操作,專業一點叫“反監控”。

源網站一般會有下面幾種限制:

1、一定時間內單個IP訪問次數,一個正常用戶訪問網站,除非是隨意的點著玩,否則不會在一段持續時間內過快訪問一個網站,持續時間也不會太長。這個問題好辦,我們可以采用大量不規則代理IP形成一個代理池,隨機從代理池中選擇代理,模擬訪問。代理IP有兩種,透明代理和匿名代理。

2、一定時間內單個賬號訪問次數,如果一個人一天24小時都在訪問一個數據接口,而且速度非常快,那就有可能是機器人了。我們可以采用大量行為正常的賬號,行為正常就是普通人怎么在社交網站上操作,并且單位時間內,訪問URL數目盡量減少,可以在每次訪問中間間隔一段時間,這個時間間隔可以是一個隨機值,即每次訪問完一個URL,隨機隨眠一段時間,再接著訪問下一個URL。

如果能把賬號和IP的訪問策略控制好了,基本就沒什么問題了。當然對方網站也會有運維會調整策略,敵我雙方的一場較量,爬蟲必須要能感知到對方的反監控將會對我們有影響,通知管理員及時處理。其實最理想的是能夠通過機器學習,智能的實現反監控對抗,實現不間斷地抓取。

下面是本人近期正在設計的一個分布式爬蟲架構圖,如圖1所示:

圖1

純屬拙作,初步思路正在實現,正在搭建服務器和客戶端之間的通信,主要使用了Python的Socket模塊實現服務器端和客戶端的通信。如果有興趣,可以單獨和我聯系,共同探討完成更優的方案。

沒有整理與歸納的知識,一文不值!高度概括與梳理的知識,才是自己真正的知識與技能。 永遠不要讓自己的自由、好奇、充滿創造力的想法被現實的框架所束縛,讓創造力自由成長吧! 多花時間,關心他(她)人,正如別人所關心你的。理想的騰飛與實現,沒有別人的支持與幫助,是萬萬不能的。

相關學習資料移步:

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,250評論 6 530
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 97,923評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,041評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,475評論 1 308
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,253評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,801評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,882評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,023評論 0 285
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,530評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,494評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,639評論 1 366
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,177評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,890評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,289評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,552評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,242評論 3 389
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,626評論 2 370

推薦閱讀更多精彩內容