Python網路爬蟲(一):初步認識網路爬蟲

來源:互聯網
上載者:User

標籤:貪玩小神-資料分析   網路爬蟲   爬蟲   python   

無論你是由於什麼原因想做一個網路爬蟲,首先做的第一件事情就是要瞭解它。


在瞭解網路爬蟲之前一定要牢記以下4個要點,這是做網路爬蟲的基礎:


1.抓取


py的urllib不一定去用,但是要學,如果你還沒用過的話。比較好的替代品有requests等第三方更人性化、成熟的庫,如果pyer不瞭解各種庫,那就白學了。抓取最基本就是拉網頁回來。


如果深入做下去,你會發現要面對不同的網頁要求,比如有認證的,不同檔案格式、編碼處理,各種奇怪的url合規化處理、重複抓取問題、cookies跟隨問題、多線程多進程抓取、多節點抓取、抓取調度、資源壓縮等一系列問題。


所以第一步就是拉網頁回來,慢慢你會發現各種問題待你最佳化。


2.儲存


抓回來一般會用一定策略存下來,而不是直接分析,個人覺得更好的架構應該是把分析和抓取分離,更加鬆散,每個環節出了問題能夠隔離另外一個環節可能出現的問題,好排查也好更新發布。


那麼存檔案系統、SQLorNOSQL資料庫、記憶體資料庫,如何去存就是這個環節的重點。你可以選擇存檔案系統開始,然後以一定規則命名。


3.分析


對網頁進行文本分析,提取連結也好,提取本文也好,總之看你的需求,但是一定要做的就是分析連結了。可以用你認為最快最優的辦法,比如Regex。然後將分析後的結果應用與其他環節:)


4.展示


要是你做了一堆事情,一點展示輸出都沒有,如何展現價值?所以找到好的展示組件,去show出肌肉也是關鍵。
如果你為了做個站去寫爬蟲,抑或你要分析某個東西的資料,都不要忘了這個環節,更好地把結果展示出來給別人感受。


網路爬蟲的定義


網路爬蟲,即Web Spider,是一個很形象的名字。


把互連網比喻成一個蜘蛛網,那麼Spider就是在網上爬來爬去的蜘蛛。


網路蜘蛛是通過網頁的連結地址來尋找網頁的。


從網站某一個頁面(通常是首頁)開始,讀取網頁的內容,找到在網頁中的其它連結地址,然後通過這些連結地址尋找下一個網頁,這樣一直迴圈下去,直到把這個網站所有的網頁都抓取完為止。如果把整個互連網當成一個網站,那麼網路蜘蛛就可以用這個原理把互連網上所有的網頁都抓取下來。


這樣看來,網路爬蟲就是一個爬行程式,一個抓取網頁的程式。


網路爬蟲的基本操作是抓取網頁。那麼如何才能隨心所欲地獲得自己想要的頁面?


我們先從URL開始。


首先擷取網頁真正的url,簡單的代碼如下:


from urllib2 import Request, urlopen, URLError, HTTPError 
#匯入urllib2模組,且直接使用Request,不需要urllib2.Request(from... import...)   
old_url = ‘http://rrurl.cn/b1UZuP‘ #寫入網頁顯示的地址 
req = Request(old_url)  
response = urlopen(req)    
print ‘Old url :‘ + old_url  
print ‘Real url :‘ + response.geturl()


運行這串代碼,會報HTTPError:403錯誤,表示網站拒絕網路爬蟲訪問。下面列出HTTP狀態代碼:


HTTP狀態代碼通常分為5種類型,分別以1~5五個數字開頭,由3位整數組成:


------------------------------------------------------------------------------------------------
200:請求成功      處理方式:獲得響應的內容,進行處理 
201:請求完成,結果是建立了新資源。新建立資源的URI可在響應的實體中得到    處理方式:爬蟲中不會遇到 
202:請求被接受,但處理尚未完成    處理方式:阻塞等待 
204:伺服器端已經實現了請求,但是沒有返回新的信 息。如果客戶是使用者代理程式,則無須為此更新自身的文檔視圖。    處理方式:丟棄
300:該狀態代碼不被HTTP/1.0的應用程式直接使用, 只是作為3XX類型回應的預設解釋。存在多個可用的被請求資源。    處理方式:若程式中能夠處理,則進行進一步處理,如果程式中不能處理,則丟棄
301:請求到的資源都會分配一個永久的URL,這樣就可以在將來通過該URL來訪問此資源    處理方式:重新導向到分配的URL
302:請求到的資源在一個不同的URL處臨時儲存     處理方式:重新導向到臨時的URL 
304 請求的資源未更新     處理方式:丟棄 
400 非法請求     處理方式:丟棄 
401 未授權     處理方式:丟棄 
403 禁止     處理方式:丟棄 
404 沒有找到     處理方式:丟棄 
5XX 回應代碼以“5”開頭的狀態代碼表示伺服器端發現自己出現錯誤,不能繼續執行請求    處理方式:丟棄


這時候我們該怎麼辦呢?其實很簡單,讓爬蟲偽裝成正常IP訪問網站就可以解決了。代碼如下:


---------------------------------------  


   程式:twxs爬蟲  
   版本:0.1  
   貪玩小神  
   日期:2015-07-29  
   語言:Python 2.7   
   功能:輸出網站真實的url  
--------------------------------------- 
import urllib
import urllib2
#匯入urllib,urllib2模組,不推薦使用from ... import ...
old_url = ‘http://www.zhubajie.com/wzkf/th1.html‘
user_agent = ‘Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6‘
#設定初始值old_url,user_agent
#User-Agent : 有些伺服器或 Proxy 會通過該值來判斷是否是瀏覽器發出的請求,這裡設定User-Agent來偽裝成瀏覽器
values = {‘name‘ : ‘Michael Foord‘,
          ‘location‘ : ‘Northampton‘,
          ‘language‘ : ‘Python‘ }
headers = { ‘User-Agent‘ : user_agent }
#初始化操作
data = urllib.urlencode(values)
req = urllib2.Request(old_url, data, headers=headers) 
#用戶端向伺服器發送請求
response = urllib2.urlopen(req)
#伺服器相應用戶端的請求
print ‘Old url :‘ + old_url  
print ‘Real url :‘ + response.geturl()


著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

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.