python爬蟲總結

來源:互聯網
上載者:User

標籤:資料包   使用   一起   變化   支援   按鍵精靈   理解   python   介面   

[TOC]

由於某些原因最近終於可以從工作的瑣事中抽出身來,有時間把之前的一些爬蟲知識進行了一個簡單的梳理,也從中體會到階段性地對過往知識進行梳理是真的很有必要。

常用第三方庫

對於爬蟲初學者,建議在瞭解爬蟲原理以後,在不使用任何爬蟲架構的情況下,使用這些常用的第三方庫自己實現一個簡單的爬蟲,這樣會加深對爬蟲的理解。

urllib和requests都是python的HTTP庫,包括urllib2模組以巨大的複雜性代價擷取綜合性的功能。相比於urllib2,Requests模組更能簡約的支援完整的簡單用例。關於urllib和requests的優缺點和區別,大家可以去網上查一下。

BeautifulSoup和lxml都是python頁面解析的庫。BeautifulSoup 是基於 DOM 的,會載入整個文檔,解析整個DOM樹,因此時間和記憶體開銷都會大很多。而lxml只會進行局部遍曆,使用xpath能夠很快定位標籤。bs4 是用 python 寫的,lxml 是 c 語言實現的,也決定了lxml比bs4要快。

該部落格有比較全面的關於python爬蟲常用第三方庫的匯總,可做參考。
60877817

爬蟲架構

python常用的爬蟲架構就是scrapy和pyspider兩個。
關於架構的使用方法及詳細介紹,可參考官方文檔。

動態網頁面渲染1. url請求分析

(1)認真分析頁面結構,查看js響應的動作;
(2)藉助瀏覽器分析js點擊動作所發出的請求url;
(3)將此非同步請求的url作為scrapy的start_url或者yield reques再次進行抓取。

2. selenium

Selenium是一個Web的自動化測試載入器,最初是為網站自動化測試而開發的,類型像我們玩遊戲用的按鍵精靈,可以按指定的命令自動化操作,不同是Selenium可以直接運行在瀏覽器上,它支援所有主流的瀏覽器(包括PhantomJS這些無介面的瀏覽器)。

Selenium可以根據我們的指令,讓瀏覽器自動載入頁面,擷取需要的頁面,甚至頁面截屏,或者判斷網站上某些動作是否發生。

Selenium自己不帶瀏覽器,不支援瀏覽器的功能,它需要與第三方瀏覽器結合在一起才能使用。

3. phantomjs

使用selenium呼叫瀏覽器進行抓取頁面時,由於要執行開啟瀏覽器並渲染頁面的操作,當進行大規模資料抓取時效率較低,無法滿足需求。這時我們可以選擇使用phantomjs。

PhantomJS是一個基於Webkit的"無介面"(headless)瀏覽器,它會把網站載入到記憶體並執行頁面上的JavaScript,因為不會展示圖形介面,所以運行起來比完整的瀏覽器更高效。

如果我們把Selenium和PhantomJS結合在一起,就可以運行一個非常強大的網路爬蟲了,這個爬蟲可以處理JavaScript、Cookie、headers,以及任何我們真實使用者需要做的事情。

4. splash

Splash是一個Javascript渲染服務。它是一個實現了HTTP API的輕量級瀏覽器,Splash是用Python實現的,同時使用Twisted和QT。Twisted(QT)用來讓服務具有非同步處理能力,以發揮webkit的並發能力。

python串連splash的庫叫做scrapy-splash,scrapy-splash使用的是Splash HTTP API, 所以需要一個splash instance,一般採用docker運行splash,所以需要安裝docker。

5. spynner

spynner是一個QtWebKit的用戶端,它可以類比瀏覽器,完成載入頁面、引發事件、填寫表單等操作。

爬蟲防屏蔽策略1. 修改User-Agent

User-Agent是一種最常見的偽裝瀏覽器的手段。

User-Agent是指包含瀏覽器資訊、作業系統資訊等的一個字串,也稱之為一種特殊的網路通訊協定。伺服器通過它判斷當前訪問對象是瀏覽器、郵件用戶端還是網路爬蟲。在request.headers裡可以查看user-agent,關於怎麼分析資料包、查看其User-Agent等資訊,這個在前面的文章裡提到過。

具體方法可以把User-Agent的值改為瀏覽器的方式,甚至可以設定一個User-Agent池(list,數組,字典都可以),存放多個“瀏覽器”,每次爬取的時候隨機取一個來設定request的User-Agent,這樣User-Agent會一直在變化,防止被牆。

2. 禁止cookies

cookie其實是儲存在使用者終端的一些被加密的資料,有些網站通過cookies來識別使用者身份,如果某個訪問總是高頻率地發請求,很可能會被網站注意到,被嫌疑為爬蟲,這時網站就可以通過cookie找到這個訪問的使用者而拒絕其訪問。

通過禁止cookie,這是用戶端主動阻止伺服器寫入。禁止cookie可以防止可能使用cookies識別爬蟲的網站來ban掉我們。

在scrapy爬蟲中可以設定COOKIES_ENABLES= FALSE,即不啟用cookies middleware,不向web server發送cookies。

3. 佈建要求時間間隔

大規模集中訪問對伺服器的影響較大,爬蟲可以短時間增大伺服器負載。這裡需要注意的是:設定下載等待時間的範圍控制,等待時間過長,不能滿足短時間大規模抓取的要求,等待時間過短則很有可能被拒絕訪問。

設定合理的請求時間間隔,既保證爬蟲的抓取效率,又不對對方伺服器造成較大影響。

4. 代理IP池

其實微博識別的是IP,不是帳號。也就是說,當需要連續抓取很多資料的時候,類比登入沒有意義。只要是同一個IP,不管怎麼換帳號也沒有用,主要的是換IP。

web server應對爬蟲的策略之一就是直接將IP或者整個IP段都封掉禁止訪問,當IP被禁封后,轉換到其他IP繼續訪問即可。方法:代理IP、本地IP資料庫(使用IP池)。

5. 使用Selenium

使用Selenium來類比人工點擊訪問網站,是種很有效防止被ban的方式。但是Selenium效率較低,不適合大規模資料抓取。

6. 破解驗證碼

驗證碼是現在最常見的防止爬蟲的手段。有能力的小夥伴可以自己寫演算法破解驗證碼,不過一般我們可以花點錢使用第三方打碼平台的介面,輕鬆實現驗證碼的破解。

結語

以上內容就是關於python爬蟲的一點梳理,具體到某個技術點需要自己再查詳細資料。希望對於學習爬蟲的同學有一點點協助。

python爬蟲總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.