爬蟲之前
在着手寫爬蟲之前,要先把其需要的知識線路理清楚。
第一:了解相關Http協議知識
HTTP是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫。它的發展是萬維網協會(World Wide Web Consortium)和Internet工作小組IETF(Internet Engineering Task Force)合作的結果,(他們)最終發布了一系列的RFC,RFC 1945定義了HTTP/1.0版本。其中最著名的就是RFC 2616。RFC 2616定義了今天普遍使用的一個版本——HTTP 1.1。
HTTP協議(HyperText Transfer Protocol,超文本傳輸協議)是用於從WWW服務器傳輸超文本到本地瀏覽器的傳送協議。它可以使瀏覽器更加高效,使網絡傳輸減少。它不僅保證計算機正確快速地傳輸超文本文檔,還確定傳輸文檔中的哪一部分,以及哪部分內容首先顯示(如文本先於圖形)等。
HTTP的請求響應模型
HTTP協議永遠都是客戶端發起請求,服務器回送響應。
這樣就限制了使用HTTP協議,無法實現在客戶端沒有發起請求的時候,服務器將消息推送給客戶端。
HTTP協議是一個無狀態的協議,同一個客戶端的這次請求和上次請求是沒有對應關系。
工作流程
一次HTTP操作稱為一個事務,其工作過程可分為四步:
1)首先客戶機與服務器需要建立連接。只要單擊某個超級鏈接,HTTP的工作開始。
2)建立連接后,客戶機發送一個請求給服務器,請求方式的格式為:統一資源標識符(URL)、協議版本號,后邊是MIME信息包括請求修飾符、客戶機信息和可能的內容。
3)服務器接到請求后,給予相應的響應信息,其格式為一個狀態行,包括信息的協議版本號、一個成功或錯誤的代碼,后邊是MIME信息包括服務器信息、實體信息和可能的內容。
4)客戶端接收服務器所返回的信息通過瀏覽器顯示在用戶的顯示屏上,然后客戶機與服務器斷開連接。
如果在以上過程中的某一步出現錯誤,那么產生錯誤的信息將返回到客戶端,有顯示屏輸出。對於用戶來說,這些過程是由HTTP自己完成的,用戶只要用鼠標點擊,等待信息顯示就可以了。
第二:了解Python中urllib庫
Python2系列使用的是urllib2,Python3后將其全部整合為urllib;我們所需學習的是幾個常用函數。細節可去官網查看。
第三:開發工具
Python自帶編譯器 -- IDLE,十分簡潔;PyCharm -- 交互很好的Python一款IDE;Fiddler -- 網頁請求監控工具,我們可以使用它來了解用戶觸發網頁請求后發生的詳細步驟;
簡單網頁爬蟲
代碼
''' 第一個示例:簡單的網頁爬蟲 爬取豆瓣首頁 ''' import urllib.request #網址 url = "https://www.douban.com/" #請求 request = urllib.request.Request(url) #爬取結果 response = urllib.request.urlopen(request) data = response.read() #設置解碼方式 data = data.decode('utf-8') #打印結果 print(data) #打印爬取網頁的各類信息 print(type(response)) print(response.geturl()) print(response.info()) print(response.getcode())
結果
截取部分結果如下圖: