1. 程式人生 > >python爬蟲學習筆記(二)——基礎篇之爬蟲基本原理

python爬蟲學習筆記(二)——基礎篇之爬蟲基本原理

包括 for .py 非關系型 原理 sof 301跳轉 close bsp

1.什麽是爬蟲?

  請求網站並提取數據的自動化程序

2.爬蟲基本流程

 2.1發起請求

  通過HTTP庫向目標站點發起請求,即發起一個Request,請求可以包含額外的headers等信息,等待服務器響應;

 2.2獲取響應內容

  如果服務器能正常響應,會得到一個Response,Response的內容便是所要獲取的頁面內容,類型可能有HTML,     Json字符串,二進制數據(如圖片視頻)等類型;

 2.3解析內容

  得到的內容可能是HTML,可以用正則表達式、網頁解析庫進行解析;可能是Json,可以直接轉為Json對象解析;可能是二進制數據,可以做保存或者進一步的處理。

 2.4保存數據

  保存形式多樣,可以存為文本,也可以保存至數據庫,或者保存特定格式的文件。

3.什麽是Request和Response?

  技術分享圖片

  • 瀏 覽 器 發 送 消 息 給 該 網 址 所 在 的 服 務 器 , 這 個 過 程 叫 做 HTTP Request;
  • 服 務 器 收 到 瀏 覽 器 發 送 的 消 息 後 , 能 夠 根 據 瀏 覽 器 發 送 消 息 的 內 容 , 做 相 應 處 理 , 然 後 把 消 息 回 傳 給 瀏 覽 器 。 這 個 過 程 叫 做 HTTP Response;
  • 瀏 覽 器 收 到 服 務 器 的 Response 信 息 後 , 會 對 信 息 進 行 相 應 處 理 , 然後 展 示 。

 3.1request中包含什麽?

  3.1.1請求方式

  主要有GET、POST兩種類型,另外還有HEAD、PUT、DELETE、OPTIONS等

  •   GET:請求的參數已經包含在請求的網址上,網頁網址欄,url後的一長串信息就是GET的參數;可以直接輸入URL回車訪問
  •   POST:請求的信息在FORM DATA中;構造表單信息,提交後請求(如登陸)

  3.1.2請求URL

   URL全程:統一資源定位符,如一個網頁文檔、一張圖片、一個視頻都可以用URL唯一確定

  3.1.3請求頭

   包含請求時的頭部信息,如User-Agent、Host、Cookies等信息;

   包含一些比較重要的配置信息

  3.1.4請求體

   請求時額外攜帶的數據,如表單提交時的表單數據

 3.2.Response

  3.2.1響應狀態

   有多種相應狀態,如200代表成功、301跳轉、404找不到頁面、502服務器錯誤

  3.2.2響應頭

   如內容類型、內容長度、服務器信息、設置cookie等等

  3.2.3響應體

   最主要的部分,包含了請求資源的內容,如網頁HTML、圖片二進制數據等

 3.3程序演示

   通過request請求,得到response,判斷相應狀態,成功獲取響應體

1 import requests
2  
3 response=requests.get(http://www.baidu.com)
4 if response.status_code==200:#成功
5     re_text=response.text
6     re_head=response.headers
7     print(re_text.encode(encoding=utf-8))#響應體,這裏註意編碼
8     print(re_head)#響應頭

4.可以抓怎樣的數據?

 網頁文本

   如HTML文檔、Json格式文本等

 圖片

   獲取的是二進制文件,保存為圖片格式

  【示例】

1 #requset獲取
2 import requests 3 response=requests.get(https://www.baidu.com/img/bd_logo1.png) 4 #print(response.content) 5 6 with open(baidu.png,wb)asf: 7 f.write(response.content) 8 f.close()

 視頻

   同為二進制文件,保存為視頻格式即可

 其他

   只要是能請求到的,都能獲取

5.怎樣來解析

  •   直接處理

      網頁本身構成簡單,返回內容簡單,比如可能返回就是一個最簡單的字符串,簡單處理去除頭尾空格即可

  •   Json解析

  •   正則表達式

  •   BeautifulSoup庫解析

  •   PyQuery庫解析

  •   XPath庫解析

6.為什麽抓取數據與獲得數據不同?

  request只得到源代碼(相當於加密過後的):包括js、jss

    js、jss後續加載起來後,後臺會獲取數據,渲染後才會變成我們看到的網頁----我們要獲取的

7.怎樣解決JavaScript渲染的問題?

  •   分析Ajax請求;

  •   Selenium/webdriver;

  •   Splash; ----------後三個模擬加載JS

  •   PyV8、Ghost.py

8.怎樣保存數據?

  文本

    純文本、Json、XML

  關系型數據庫

    MYSQL、Ocacle、SQL Server

  非關系型數據庫

    MongoDB、Redis等Key-Value形式存儲

  二進制文件

    圖片、視頻、音頻

python爬蟲學習筆記(二)——基礎篇之爬蟲基本原理