崔慶才老師爬蟲原理講解筆記

目錄:

一、什麼是爬蟲?

二、爬蟲的基本流程

三、什麼是Request和Response?

四、Request中包含什麼?

五、Response中包含什麼?

六、能抓怎樣的數據

七、解析方式

八、為啥我抓到的和瀏覽器看到的不一樣?

九、怎麼解決JavaScript渲染的問題?

十、怎樣保存數據?

一、什麼是爬蟲?

簡單來說就是:請求網站並提取數據的自動化程序。(個人理解就是我們點擊網頁瀏覽的過程)

操作:右鍵--->審查元素(如若想提取鏈接信息的話,就要從這些htm代碼提取文字和鏈接信息,用解析庫解析以上的信息,存成結構化的數據)

二、爬蟲的基本流程

1.robots.txt

通過在所要爬取的母網站(如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:m.weibo.com(可以使用第五中的代碼演示)

由於JavaScript渲染的問題,在network看到的代碼(我們通過Python)與element中看到(JavaScript渲染的)不一樣

九、怎麼解決JavaScript渲染的問題?

1.分析Ajax請求(返回Json格式數據)

2.通過Selenium/WebDriver(做自動化測試)來模擬一個瀏覽器

python爬蟲從入門到放棄(八)之 Selenium庫的使用www.cnblogs.com圖標

(此網址為selenium.webdriver的使用)

3.Slansh

scrapinghub/splashgithub.com圖標

(有興趣可以了解一下)

4.PyV8、Ghost.py

十、怎樣保存數據?

1.文本:純文本、Json、Xml等

2.關係型資料庫:如MySQL、Oracle、SQL Server等具有結構化表結構形式存儲

3.非關係型資料庫:MongoDB、Redis等Key-Value形式存儲

4.二進位文件:如圖片、視頻、音頻等等直接保存成特定格式即可

推薦閱讀:

編程小白如何寫爬蟲程序
NodeJs爬蟲抓取古代典籍,共計16000個頁面心得體會總結

TAG:Python編程 | 網頁爬蟲 | Python |