本文和大家分享的主要是python爬蟲的基本原理相關(guān)內(nèi)容,希望對初學(xué)python爬蟲的童鞋有所幫助,一起來看看吧。
1. 什么是爬蟲
請求網(wǎng)站并 提取 數(shù)據(jù)的 自動化 程序。
2. 爬蟲基本流程
?。?/span>發(fā)起請求
通過HTTP庫向目標(biāo)站點(diǎn)發(fā)起請求,即發(fā)送一個Request,請求可以包含額外的headers等信息,等待服務(wù)器響應(yīng)。
.獲取響應(yīng)
如果服務(wù)器能正常響應(yīng),會得到一個Response,Response的內(nèi)容便是所要獲取的頁面內(nèi)容,類型可能有HTML,Json字符串,二進(jìn)制數(shù)據(jù)(如圖片視頻)等類型。
?。?/span>解析內(nèi)容
得到的內(nèi)容可能是HTML,可以用正則表達(dá)式、網(wǎng)頁解析庫進(jìn)行解析??赡苁?/span>Json,可以直接轉(zhuǎn)為Json對象解析,可能是二進(jìn)制數(shù)據(jù),可以做保存或者進(jìn)一步處理。
?。?/span>保存數(shù)據(jù)
保存形式多樣,可以存為文本,也可以保存至數(shù)據(jù)庫,或者保存特定格式的文件。
3. 什么是Request和Response
4. Request中包含什么
. 請求方式
主要有GET、POST兩種類型,另外還有HEAD、PUT、DELETE、OPTIONS等。
1. GET:請求的參數(shù)全都包含在請求的網(wǎng)址中。直接輸入鏈接即可訪問。
2. POST:與GET不同,請求的信息封裝了,包含在Formdata中。需要構(gòu)造表單,然后點(diǎn)擊提交。
?。?nbsp;請求URl
URL全稱統(tǒng)一資源定位符,入一個網(wǎng)頁文檔、一張圖片、一個視頻等都可以用URL唯一來確定。
. 請求頭Headers
包含請求時的頭部文件,包含了很重要配置信息,如User_Agent、Host、Cookies等信息。
?。?nbsp;請求體
請求時額外攜帶的數(shù)據(jù),如表單提交時的表單數(shù)據(jù)。一般GET請求無需請求體,POST請求則需要請求體。
5. Response中包含什么
?。?nbsp;響應(yīng)狀態(tài) status_code
有多種響應(yīng)狀態(tài),如200代表成功、301跳轉(zhuǎn)、404找不到頁面、502服務(wù)器錯誤。
. 響應(yīng)頭 headers
如內(nèi)容類型、內(nèi)容長度、服務(wù)器信息、設(shè)置Cookie等等。鍵值對的形式。
. 響應(yīng)體
最主要的部分,包含了請求資源的內(nèi)容,如網(wǎng)頁HTML,圖片二進(jìn)制數(shù)據(jù)等。
6. 能抓怎樣的數(shù)據(jù)
?。?nbsp;網(wǎng)頁文本
如HTML文檔、Json格式文本等。
?。?nbsp;圖片
獲取到的是二進(jìn)制文件、保存為圖片格式。
python //example 保存了一個圖片 import requests response = requests.get('https://www.baidu.com/img/baidu_jgylogo3.gif') print(response.content) with open('C:/Users/Administrator/Desktop/1.gif', 'wb') as f: f.write(response.content)
. 視頻
同為二進(jìn)制文件,保存為視頻格式即可。
?。?nbsp;其它
7. 怎樣進(jìn)行網(wǎng)頁的解析
?。?nbsp;解析方式
1. 直接處理
2. Json解析(Ajax)
3. 正則表達(dá)式
4. BeautifulSoap
5. PyQuery
6. XPath
?。?nbsp;為什么抓到的和瀏覽器看到的不一樣
因為抓到的結(jié)果里面有很多js文件,里面包含的網(wǎng)頁中內(nèi)容的請求。瀏覽器則是把所有js加載完畢后才顯示出來的。
8. 怎樣解決JavaScript渲染的問題
. 分析Ajax請求
?。?Selenium/WebDriver (模擬渲染)
?。?Splash(同上)
?。?PyV8、Ghost.py
9. 怎樣保存數(shù)據(jù)
?。?nbsp;文本
純文本、Json、Xml等
?。?nbsp;關(guān)系型數(shù)據(jù)庫
如MySQL、Oracle、SQL Server等具有結(jié)構(gòu)化表結(jié)構(gòu)形式存儲。
?。?nbsp;非關(guān)系型數(shù)據(jù)庫
如MongoDB、Redis等Key_Value形式存儲。
?。?nbsp;二進(jìn)制文件
如圖片、視頻、音頻等等直接保存成 特定格式 即可。