崔慶才老師爬蟲原理講解筆記
目錄:
一、什麼是爬蟲?
二、爬蟲的基本流程三、什麼是Request和Response?四、Request中包含什麼?五、Response中包含什麼?六、能抓怎樣的數據
七、解析方式八、為啥我抓到的和瀏覽器看到的不一樣?九、怎麼解決JavaScript渲染的問題?十、怎樣保存數據?一、什麼是爬蟲?
簡單來說就是:請求網站並提取數據的自動化程序。(個人理解就是我們點擊網頁瀏覽的過程)
操作:右鍵--->審查元素(如若想提取鏈接信息的話,就要從這些htm代碼提取文字和鏈接信息,用解析庫解析以上的信息,存成結構化的數據)
二、爬蟲的基本流程
1.robots.txt
通過在所要爬取的母網站(如http://www.weibo.com/)後面增加robots.txt,即可查出所有不可爬取的網站
2.發起請求
通過HTTP庫向目標站點發起請求,即發送一個request,請求可以包含額外的headers等信息,等待伺服器響應
3.獲取響應內容;
如果伺服器能正常響應所要獲取的頁面內容,會得到一個Response,Response的內容便是,類型可能是HTML,JSON字元串,二進位數據等類型;
4.解析內容
得到的內容可能是HTML,可以用正則表達式、網頁解析庫進行解析;可能是JSON,可以直接轉為JSON對象解析,可能是二進位數據,可以做保存或者進一步處理;
5.保存數據
保存形式多樣,可以存為文本,也可以保存至資料庫,或者保存特定格式文件
三、什麼是Request和Response?
四、Request中包含什麼?
1.請求方式:
主要有GET、POST兩種類型,另外還有HEAD、PUT、DELETE、OPTIONS等。
2.請求URL
URL全程統一資源定位符,如一個網頁文檔、一張圖片、一個視頻都可以用URL唯一來確定
3.請求頭
包含請求時的頭部信息,如User-Agent、Host、Cookies等信息。
4.請求體
請求時額外攜帶的數據,如表單提交時的表單數據(Eg:fromdata)
五、Response中包含什麼?
1.響應狀態
有多重響應狀態,如200代表成功、301是跳轉、404為找不到網頁、502伺服器錯誤
2.響應頭
如內容類型、內容長度、伺服器信息、設置Cookie等等;
3.響應體
最主要的部分,包含了請求資源的內容,如網頁HTML、圖片二進位數據等;
#結果沒有列印出來,大家可以自行嘗試
import requestsresponse = requests.get(http://www.baidu.com)print(response.text)#響應體print(response.headers)#響應頭print(response.status_code)#響應狀態碼headers = {}#定義一個頭部信息headers = {Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36}#次頭部信息為電腦自身信息response1 = requests.get(http://www.baidu.com,headers = headers)#用新的headers請求百度print(response1.status_code)#使用響應狀態碼進行檢驗
六、能抓怎樣的數據
1.網頁文本(如HTML文檔,JSON格式文本等)
2.圖片(獲取二進位文本文件,保存為圖片格式)
response2 = requests.get(https://www.baidu.com/img/bd_logo1.png)#抓取圖片print(response2.content)#列印出來為二進位格式with open(F:/dd.png,wb)as f:#創建一個文件,格式為圖片格式 f.write(response2.content) f.close#會出現705或是7787或是其他數字,檢查所在目錄下是否有dd.png這個文件就可以
3.視頻(同樣為二進位文件,保存為音頻格式即可,抓取方法如圖片抓取方法)
4.其他(只要是能請求到的,都能獲取)
七、解析方式
1.直接處理(前提:網頁構造簡單)
2.Json解析
3.正則表達式
4.BeautifulSoup
5.PyQuery
6.XPath
八、為啥我抓到的和瀏覽器看到的不一樣?
Eg:http://m.weibo.com(可以使用第五中的代碼演示)
由於JavaScript渲染的問題,在network看到的代碼(我們通過Python)與element中看到(JavaScript渲染的)不一樣
九、怎麼解決JavaScript渲染的問題?
1.分析Ajax請求(返回Json格式數據)
2.通過Selenium/WebDriver(做自動化測試)來模擬一個瀏覽器
python爬蟲從入門到放棄(八)之 Selenium庫的使用(此網址為selenium.webdriver的使用)
3.Slansh
scrapinghub/splash(有興趣可以了解一下)
4.PyV8、Ghost.py
十、怎樣保存數據?
1.文本:純文本、Json、Xml等
2.關係型資料庫:如MySQL、Oracle、SQL Server等具有結構化表結構形式存儲
3.非關係型資料庫:MongoDB、Redis等Key-Value形式存儲
4.二進位文件:如圖片、視頻、音頻等等直接保存成特定格式即可
推薦閱讀: