一、爬蟲的定義:
程序或者腳本---》自動的爬取萬維網(wǎng)的數(shù)據(jù)的程序或者腳本。
二、爬蟲可以解決的問題:
(1)解決冷啟動問題。
(2)搜索引擎的根基。---通用爬蟲。
(3)幫助機器學(xué)習(xí)建立知識圖譜。
(4)制作各種比價軟件。
三、爬蟲工程師的進階之路:
初級爬蟲工程師
1.web 前端的知識: HTML、CSS、JavaSc1ipt、 DOM、 DHTML 、Ajax、jQuery、json 等;
2、正則表達(dá)式, 能提取正常一般網(wǎng)頁中想要的信息,比如某些特殊的文字, 鏈接信息, 知道什么是懶惰, 什么是貪婪型的正則;
3、會使用 XPath 等獲取一些DOM 結(jié)構(gòu)中的節(jié)點信息;
4、知道什么是深度優(yōu)先, 廣度優(yōu)先的抓取算法, 及實踐中的使用規(guī)則;
5、能分析簡單網(wǎng)站的結(jié)構(gòu), 會使用urllib或requests 庫進行簡單的數(shù)據(jù)抓取。
中級爬蟲工程師:
1、了解什么事HASH,會簡單地使用MD5,SHA1等算法對數(shù)據(jù)進行HASH一遍存儲
2、熟悉HTTP,HTTPS協(xié)議的基礎(chǔ)知識,了解GET,POST方法,了解HTTP頭中的信息,包括返回狀態(tài)碼,編碼,user-agent,cookie,session等
3、能設(shè)置user-agent進行數(shù)據(jù)爬取,設(shè)置代理等
4、知道什么事Request,什么事response,會使用Fiddler等工具抓取及分析簡單地網(wǎng)絡(luò)數(shù)據(jù)包;對于動態(tài)爬蟲,要學(xué)會分析ajax請求,模擬制造post數(shù)據(jù)包請求,抓取客戶端session等信息,對于一些簡單的網(wǎng)站,能夠通過模擬數(shù)據(jù)包進行自動登錄。
5、對于一些難搞定的網(wǎng)站學(xué)會使用phantomjs+selenium抓取一些動態(tài)網(wǎng)頁信息
6、并發(fā)下載,通過并行下載加速數(shù)據(jù)爬取;多線程的使用。
高級爬蟲工程師:
1、能夠使用Tesseract,百度AI,HOG+SVM,CNN等庫進行驗證碼識別。
2、能使用數(shù)據(jù)挖掘技術(shù),分類算法等避免死鏈。
3、會使用常用的數(shù)據(jù)庫進行數(shù)據(jù)存儲,查詢。比如mongoDB,redis;學(xué)習(xí)如何通過緩存避免重復(fù)下載的問題。
4、能夠使用機器學(xué)習(xí)的技術(shù)動態(tài)調(diào)整爬蟲的爬取策略,從而避免被禁IP封禁等。
5、能使用一些開源框架scrapy,scrapy-redis等分布式爬蟲,能部署掌控分布式爬蟲進行大規(guī)模數(shù)據(jù)爬取。
四、搜索引擎:
1、什么是搜索引擎:
搜索引擎通過特定算法,從互聯(lián)網(wǎng)上獲取網(wǎng)頁信息,將其保存到本地,為用戶提供檢索服務(wù)的一種程序。
2、搜索引擎的組成:
搜索引擎主要是是由通用爬蟲組成的。
(1)通用爬蟲:將互聯(lián)網(wǎng)上的網(wǎng)頁信息【整體】爬取下來的爬蟲程序。
(2)搜索引擎的工作步驟:
1、抓取網(wǎng)頁
2、數(shù)據(jù)存儲
3、預(yù)處理
提取文字
中文分詞
消除噪音
。。。
4、設(shè)置網(wǎng)站排名(訪問量),為用戶提供檢索服務(wù)。
(3)為什么搜索引擎可以爬取所有的網(wǎng)頁?---搜索引擎的通用是如何來爬取所有網(wǎng)頁的。
一個網(wǎng)頁就是一個url,這個問題其實在問,【url的獲取來源】。
url的獲取來源:
1、新網(wǎng)站會主動提交網(wǎng)址給搜索引擎。
2、網(wǎng)頁中的一些外鏈,這些url全部都會加入到通用爬蟲的爬取隊列。
3、搜索引擎和dns解析服務(wù)商合作,如果有新網(wǎng)站注冊,搜索引擎就可拿到網(wǎng)址。
3、通用爬蟲的缺陷:
(1)通用爬蟲是爬取整個網(wǎng)頁,但是網(wǎng)頁中90%的內(nèi)容基本是沒用。
(2)不能滿足不同行業(yè),不同人員的不同需求。
(3)只能獲取文字,不能獲取音頻,視頻,文檔等信息。
(4)只能通過關(guān)鍵字查詢,無法通過語義查詢。
4、聚焦爬蟲:
在實施網(wǎng)頁抓取的過程中,【會對內(nèi)容進行篩選】,盡量保證只抓取與【需求相關(guān)】的信息的爬蟲程序。
五、robots協(xié)議:
定義:網(wǎng)絡(luò)爬蟲排除標(biāo)準(zhǔn)
作用:告訴搜索引擎那些可以爬那些不能爬。
六、http協(xié)議:
1、什么是http協(xié)議:
是一種規(guī)范——————>約束發(fā)布和接受html的規(guī)范。
2、http和https
http:超文本傳輸協(xié)議。
https:安全版的http協(xié)議。---ssl---
對稱加密---密鑰
非對稱---私鑰+公鑰
3、數(shù)字簽證
https:443
http:80
? Upgrade-Insecure-Requests: 1:可以將http升級成https請求。
4、http的特點:
(1)應(yīng)用層協(xié)議。
(2)無連接:http每次發(fā)送請求和響應(yīng)的過程都是獨立。
在http 1.0以后,有請求頭:connection:keep-alive:客戶端和服務(wù)建立長連接。
(3)無狀態(tài):http協(xié)議不記錄狀態(tài)。
cookie和session做到請求狀態(tài)的記錄。
cookie是在客戶端保存,session是在服務(wù)器保存。
5、url:統(tǒng)一資源定位符。
(1)主要作用:用來定位互聯(lián)網(wǎng)上的任意資源的位置。
(2)為什么url可以定位任意資源?
組成:https://www.baidu.com/index.html?username=123&password=abc#top
scheme:協(xié)議---https
netloc:網(wǎng)絡(luò)地址:ip:port---www.baidu.com
通過ip定位電腦,通過port定位應(yīng)用。
192.168.92.10:
代理ip:ip:port
path:資源路徑。---index.html
query:請求參數(shù):---?后面的內(nèi)容username=123&password=abc
fragment:錨點----top
原因:url包含netloc可以定位電腦,path定位資源,這樣就可以找到任意在互聯(lián)網(wǎng)上的信息。
(3)特殊符號:
?:后面就是請求參數(shù)
&:連接請求參數(shù)
#:錨點----如果url中有錨點,在爬蟲程序中盡量去除。
6、 http的工作過程:
(1)地址解析:
將url的所有組成部分分別解析出來。
(2)封裝http請求數(shù)據(jù)包。
將第一步解析出來的信息進行裝包。---http數(shù)據(jù)包。
(3)封裝tcp數(shù)據(jù)包,通過三次握手建立tcp。
(4)客戶端發(fā)送請求
(5)服務(wù)發(fā)送響應(yīng)
(6)關(guān)閉tcp連接。
7、當(dāng)我們在瀏覽器輸入一個url,瀏覽器加載出這個頁面,中間做了哪些事?
(1)客戶端解析url,封裝數(shù)據(jù)包,建立連接,發(fā)送請求。
(2)服務(wù)器返回url對應(yīng)資源文件給客戶端,比如:index.html。
(3)客戶端檢查index.html是否有靜態(tài)資源(引用外部文件),比如js,css,圖片。有的話再分別發(fā)送請求,來獲取這些靜態(tài)資源。
(4)客戶端獲取所有靜態(tài),通過html語法,完全將index.html頁面顯示出來。
8、 http的請求方法:
get請求:get(獲取)-->獲取服務(wù)器的指定資源--->涉及到篩選一些信息--->請求參數(shù):主要拼接在url中。--->不安全(別人可以通過url獲取信息)--->請求參數(shù)的大小受限。
post請求:post(郵遞)--->向服務(wù)器傳遞數(shù)據(jù)--->請求數(shù)據(jù)是方法在請求實體中的--->安全--->大小不受限。
9、客戶端請求
(1)組成:請求行、請求頭、空行、請求數(shù)據(jù)(實體)
請求頭:請求方法;host地址,http協(xié)議版本。
(2)請求頭:
user-agent:客戶端標(biāo)識。
accept:允許傳入的文件類型。
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Referer:標(biāo)識產(chǎn)生請求的網(wǎng)頁來自于哪個網(wǎng)頁。
防盜鏈
cookie:cookie信息。---現(xiàn)在很多網(wǎng)站,必須封裝cookie才給數(shù)據(jù)。
post請求重要的請求頭:
content-type:post請求的數(shù)據(jù)類型
content-length:post請求數(shù)據(jù)的長度。
ajax請求必須封裝的頭:
x-requested-with:xmlhttprequest
10、服務(wù)器響應(yīng):
(1)組成:狀態(tài)行、響應(yīng)頭、空行、響應(yīng)正文。
(2)響應(yīng)頭:
Content-Type:text/html;charset=UTF-8
(3)狀態(tài)碼(面試常考):
1XX:表示服務(wù)器成功接收部分請求,還需要發(fā)剩余請求才能處理整個過程。(處理了一半)
2XX:標(biāo)識服務(wù)器成功接收請求并處理完整個過程。(成功)
200成功
3XX:為了完成請求,客戶端需要進一步細(xì)化請求。
302:重定向
304:使用緩存資源
4XX:客戶端請求錯誤。(url寫錯了)
404:服務(wù)器無法找到請求內(nèi)容。
403:服務(wù)器拒絕訪問,權(quán)限不夠。
5XX:服務(wù)器錯誤。
502:服務(wù)器錯誤
500:請求未完成,服務(wù)器遇到不可知問題。