1. 程式人生 > >爬蟲實戰---持續更新中-------------

爬蟲實戰---持續更新中-------------

實習了一個月中途被學校老師召回,難免焦慮

那就開始學習python吧

從經典的爬蟲開始。

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

一.準備階段

1.什麼是爬蟲?

爬蟲:就是抓取網頁資料的程式。

2.HTTP和HTTPS

HTTP協議(HyperText Transfer Protocol,超文字傳輸協議):是一種釋出和接收 HTML頁面的方法。

HTTPS(Hypertext Transfer Protocol over Secure Socket Layer)簡單講是HTTP的安全版,在HTTP下加入SSL層。

SSL(Secure Sockets Layer 安全套接層)主要用於Web的安全傳輸協議,在傳輸層對網路連線進行加密,保障在Internet上資料傳輸的安全。

3.瀏覽器傳送HTTP請求的過程:

  1. 當用戶在瀏覽器的位址列中輸入一個URL並按回車鍵之後,瀏覽器會向HTTP伺服器傳送HTTP請求。HTTP請求主要分為“Get”和“Post”兩種方法。

  2. 當我們在瀏覽器輸入URL http://www.baidu.com 的時候,瀏覽器傳送一個Request請求去獲取 http://www.baidu.com 的html檔案,伺服器把Response檔案物件傳送回給瀏覽器。

  3. 瀏覽器分析Response中的 HTML,發現其中引用了很多其他檔案,比如Images檔案,CSS檔案,JS檔案。 瀏覽器會自動再次傳送Request去獲取圖片,CSS檔案,或者JS檔案。

  4. 當所有的檔案都下載成功後,網頁會根據HTML語法結構,完整的顯示出來了。

4.URL(Uniform / Universal Resource Locator的縮寫)

定義:統一資源定位符,是用於完整地描述Internet上網頁和其他資源的地址的一種標識方法。

基本格式:scheme://host[:port#]/path/…/[?query-string][#anchor]

  • scheme:協議(例如:http, https, ftp)
  • host:伺服器的IP地址或者域名
  • port#:伺服器的埠(如果是走協議預設埠,預設埠80)
  • path:訪問資源的路徑
  • query-string:引數,傳送給http伺服器的資料
  • anchor:錨(跳轉到網頁的指定錨點位置)

5.客戶端HTTP請求

URL只是標識資源的位置,而HTTP是用來提交和獲取資源。客戶端傳送一個HTTP請求到伺服器的請求訊息,包括以下格式:

請求行請求頭部空行請求資料

一個典型的HTTP請求

複製程式碼

GET https://www.baidu.com/ HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh,zh-CN;q=0.8,ar;q=0.6,zh-TW;q=0.4
Cookie: BAIDUID=AE4D1DA6B2D6689BB8C557B3436893E3:FG=1; BIDUPSID=AE4D1DA6B2D6689BB8C557B3436893E3; PSTM=1501466227; BD_UPN=12314353; BD_CK_SAM=1; PSINO=1; H_PS_PSSID=1420_25548_21080_20929; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BDSVRTM=0

複製程式碼

 常用請求報頭

 cookie和session

HTTP請求方法

複製程式碼

序號   方法      描述
1     GET       請求指定的頁面資訊,並返回實體主體。
2     HEAD      類似於get請求,只不過返回的響應中沒有具體的內容,用於獲取報頭
3     POST      向指定資源提交資料進行處理請求(例如提交表單或者上傳檔案),資料被包含在請求體中。POST請求可能會導致新的資源的建立和/或已有資源的修改。
4     PUT       從客戶端向伺服器傳送的資料取代指定的文件的內容。
5     DELETE    請求伺服器刪除指定的頁面。
6     CONNECT   HTTP/1.1協議中預留給能夠將連線改為管道方式的代理伺服器。
7     OPTIONS   允許客戶端檢視伺服器的效能。
8     TRACE     回顯伺服器收到的請求,主要用於測試或診斷。

複製程式碼

主要方法get和post請求

  • GET是從伺服器上獲取資料,POST是向伺服器傳送資料

  • GET請求引數顯示,都顯示在瀏覽器網址上,HTTP伺服器根據該請求所包含URL中的引數來產生響應內容,即“Get”請求的引數是URL的一部分。 例如: http://www.baidu.com/s?wd=Chinese

  • POST請求引數在請求體當中,訊息長度沒有限制而且以隱式的方式進行傳送,通常用來向HTTP伺服器提交量比較大的資料(比如請求中包含許多引數或者檔案上傳操作等),請求的引數包含在“Content-Type”訊息頭裡,指明該訊息體的媒體型別和編碼.

HTTP響應狀態碼

 View Code

瀏覽器核心

複製程式碼

瀏覽器                         核心
IE                           Trident
Chrome                       Webkit
Firefox                      Gecho
Opera                        Pesto
Safari(Apple)                Webkit 

複製程式碼

HTTP代理工具Fiddler Fiddler是一款強大Web除錯工具,它能記錄所有客戶端和伺服器的HTTP請求.

Request部分詳解

  1. Headers —— 顯示客戶端傳送到伺服器的 HTTP 請求的 header,顯示為一個分級檢視,包含了 Web 客戶端資訊、Cookie、傳輸狀態等。
  2. Textview —— 顯示 POST 請求的 body 部分為文字。
  3. WebForms —— 顯示請求的 GET 引數 和 POST body 內容。
  4. HexView —— 用十六進位制資料顯示請求。
  5. Auth —— 顯示響應 header 中的 Proxy-Authorization(代理身份驗證) 和 Authorization(授權) 資訊.
  6. Raw —— 將整個請求顯示為純文字。
  7. JSON - 顯示JSON格式檔案。
  8. XML —— 如果請求的 body 是 XML 格式,就是用分級的 XML 樹來顯示它。

 Responser部分詳解

  1. Transformer —— 顯示響應的編碼資訊。
  2. Headers —— 用分級檢視顯示響應的 header。
  3. TextView —— 使用文字顯示相應的 body。
  4. ImageVies —— 如果請求是圖片資源,顯示響應的圖片。
  5. HexView —— 用十六進位制資料顯示響應。
  6. WebView —— 響應在 Web 瀏覽器中的預覽效果。
  7. Auth —— 顯示響應 header 中的 Proxy-Authorization(代理身份驗證) 和 Authorization(授權) 資訊。
  8. Caching —— 顯示此請求的快取資訊。
  9. Privacy —— 顯示此請求的私密 (P3P) 資訊。
  10. Raw —— 將整個響應顯示為純文字。
  11. JSON - 顯示JSON格式檔案。
  12. XML —— 如果響應的 body 是 XML 格式,就是用分級的 XML 樹來顯示它 。

6.python的庫

所謂網頁抓取,就是把URL地址中指定的網路資源從網路流中讀取出來,儲存到本地。 在Python中有很多庫可以用來抓取網頁,先學習urllib2

.網路:Python 標準庫之urllib2-負責開啟URL,HTTP協議之類的。