1. 程式人生 > >Python3 對網頁進行簡單爬蟲操作

Python3 對網頁進行簡單爬蟲操作

一直想好好學習一下Python爬蟲,之前斷斷續續的把Python基礎學了一下,悲劇的是學的沒有忘的快哭。只能再次拿出來濾了一遍,趁熱打鐵,借鑑眾多大神的爬蟲案例,加入Python網路爬蟲的學習大軍~~~ 

爬蟲之前 

在著手寫爬蟲之前,要先把其需要的知識線路理清楚。

第一:瞭解相關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 – 網頁請求監控工具,我們可以使用它來了解使用者觸發網頁請求後發生的詳細步驟;

簡單網頁爬蟲

程式碼

[python] view plain copy print?
  1. ”’ 
  2. 第一個示例:簡單的網頁爬蟲 
  3. 爬取豆瓣首頁 
  4. ”’
  5. import urllib.request  
  6. #網址
  7. url = ”http://www.douban.com/”
  8. #請求
  9. request = urllib.request.Request(url)  
  10. #爬取結果
  11. response = urllib.request.urlopen(request)  
  12. data = response.read()  
  13. #設定解碼方式
  14. data = data.decode(’utf-8’)  
  15. #列印結果
  16. print(data)  
  17. #列印爬取網頁的各類資訊
  18. print(type(response))  
  19. print(response.geturl())  
  20. print(response.info())  
  21. print(response.getcode())  
'''
第一個示例:簡單的網頁爬蟲

爬取豆瓣首頁
'''

import urllib.request





#網址 url = "http://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())