python爬蟲學習筆記(二)——基礎篇之爬蟲基本原理
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爬蟲學習筆記(二)——基礎篇之爬蟲基本原理