1、爬蟲的概念
? 概念:(spider光坝,網(wǎng)絡(luò)蜘蛛)尸诽,通過互聯(lián)網(wǎng)上一個(gè)個(gè)的網(wǎng)絡(luò)節(jié)點(diǎn),進(jìn)行數(shù)據(jù)的獲取
? 分類:
? 通用爬蟲(了解):
? 主要用于搜索引擎(百度盯另、google性含,搜狗等)
? 搜索引擎工作原理:
? 核心部分:通用爬蟲按照整個(gè)互聯(lián)網(wǎng)的拓?fù)浣Y(jié)構(gòu),進(jìn)行批量的爬取鸳惯,然后進(jìn)行數(shù)據(jù)的清洗與篩選商蕴,然后存入百度的數(shù)據(jù)庫
? 檢索部分:提供給用戶一個(gè)搜索平臺(tái),并且按照一定的順序把關(guān)鍵字相關(guān)的信息展現(xiàn)出來
?
? 現(xiàn)在的搜索引擎獲取數(shù)據(jù)的方式:
? 1)通過通用爬蟲獲戎シⅰ(過程比較緩慢)
? 2)主動(dòng)提交自己的url
? 3)搜索引擎運(yùn)營商和DNS的運(yùn)營商合作(向DNS直接要一些有價(jià)值的網(wǎng)站)
? 信息的排名規(guī)則:
? 1)根據(jù)流量(用戶的點(diǎn)擊量)
? 2)競價(jià)排名究恤,根據(jù)一定的規(guī)則以及錢財(cái)?shù)纫蛩厝Q定誰在前面
? robots協(xié)議:(爬蟲的一個(gè)約定俗成一個(gè)協(xié)議)
? 爬蟲在取爬取一個(gè)網(wǎng)站的時(shí)候,首先要讀取這個(gè)網(wǎng)站robots.txt文件后德,查看該文件中規(guī)定的那些內(nèi)容可以爬取,那些不可以抄腔,在爬取的時(shí)候要嚴(yán)格遵從瓢湃。搜索引擎爬蟲在取爬取的時(shí)候一定要遵從robots協(xié)議,我們寫不需要赫蛇。
? 聚焦爬蟲:
? 根據(jù)客戶或者用戶的需求绵患,取定制的爬蟲,具有比較強(qiáng)的針對(duì)性
? 聚焦爬蟲的工作原理:
? 1悟耘、數(shù)據(jù)的抓取
? 面臨的問題:http協(xié)議落蝙、url處理等
? 反爬:用戶代理、ip禁止暂幼、驗(yàn)證碼筏勒、會(huì)話信息等
? 2、數(shù)據(jù)的解析
? 遇到的數(shù)據(jù):html旺嬉、xml管行、json
? 反爬:js動(dòng)態(tài)加載、js加密等
? 3邪媳、數(shù)據(jù)的存儲(chǔ)
? csv文件捐顷、關(guān)系型數(shù)據(jù)庫(mysql)、redis雨效、json等
? 對(duì)于爬蟲而言最核心的部分是解決反爬
內(nèi)容學(xué)習(xí)
? 1迅涮、python基礎(chǔ)
? 2、相關(guān)的庫
? 請(qǐng)求:urllib徽龟、requests叮姑、scrapy等
? 解析:正則、xpath顿肺、bs4戏溺、selenium組件等
? 3渣蜗、多任務(wù)處理
? 多進(jìn)程、多線程旷祸、協(xié)程
? 4耕拷、分布式爬蟲的部署
2、HTTP協(xié)議
? 1托享、什么是HTTP協(xié)議骚烧?
? 1)是基于請(qǐng)求與響應(yīng)的應(yīng)用層協(xié)議,底層協(xié)議TCP保證了數(shù)據(jù)可靠傳輸 2)通過url進(jìn)行客戶端與服務(wù)器之間的數(shù)據(jù)交互 3)是一種C/S(B/S)模式的協(xié)議闰围,客戶端向服務(wù)器發(fā)起請(qǐng)求赃绊,服務(wù)器處理請(qǐng)求并且返回響應(yīng) 4)該協(xié)議是一種無狀態(tài)的協(xié)議(不會(huì)記錄用戶的訪問狀態(tài))
? 2、http協(xié)議過程:
? 1)創(chuàng)建TCP鏈接:客戶端與服務(wù)器的三次握手:客戶端向服務(wù)器發(fā)出一個(gè)是否同意創(chuàng)建連接的信號(hào)羡榴、服務(wù)器回應(yīng)給客戶是否空閑(即是否可以創(chuàng)建連接) 碧查、客戶端再次向服務(wù)器發(fā)起創(chuàng)建連接的信息進(jìn)而創(chuàng)建連接;通過三次握手以后客戶端和服務(wù)器就創(chuàng)建出了一數(shù)據(jù)通路校仑,接下來就可以保證http協(xié)議包的可靠傳輸了
? 2)客戶端向服務(wù)器發(fā)起http請(qǐng)求:通過url把參數(shù)(請(qǐng)求體)以及請(qǐng)求頭傳遞給服務(wù)器忠售,請(qǐng)求方式有常見4中,常用get和post
? 請(qǐng)求頭:請(qǐng)求頭中包含了本次請(qǐng)求的相關(guān)的配置信息(比如數(shù)據(jù)格式迄沫、cookie等)稻扬,決定了客戶端和服務(wù)器進(jìn)行數(shù)據(jù)交流的方式與格式
? 請(qǐng)求體:就是參數(shù),客戶端向服務(wù)提交的內(nèi)容
? get和post請(qǐng)求的區(qū)別:
? 形式上:get請(qǐng)求參數(shù)拼接在url后面 post請(qǐng)求不體現(xiàn)在url中
? 內(nèi)容上:get請(qǐng)求有數(shù)據(jù)量的限制(不同的瀏覽器對(duì)url最大長度都有不同的限制)羊瘩,post的請(qǐng)求是不限制請(qǐng)求體數(shù)據(jù)量的(有的web服務(wù)器會(huì)有一個(gè)最大請(qǐng)求體的限制泰佳,比如阿帕奇限制為20M)
? 3)服務(wù)器處理請(qǐng)求,并且把處理結(jié)果響應(yīng)給客戶端
? 4)關(guān)閉連接:TCP的四次揮手
3尘吗、環(huán)境
? windows或linux逝她,python3.6 , pycharm(sublime)睬捶, 后期(scrapy和redis數(shù)據(jù)庫)Ubuntu系統(tǒng)
4汽绢、fiddler
?
?
面試題:
? 1、請(qǐng)您解釋一下什么是http協(xié)議侧戴?
? 2宁昭、請(qǐng)談一下get和post的區(qū)別
? 3、http協(xié)議和https協(xié)議有什么區(qū)別酗宋?
? 4积仗、http協(xié)議的常見狀態(tài)碼,及其含義蜕猫?
? 5寂曹、如何取配置https協(xié)議?
?
?