【Python 爬虫】 1、爬虫基础概念
爬蟲基礎(chǔ)概念
網(wǎng)絡(luò)爬蟲的定義
網(wǎng)絡(luò)爬蟲(Crawler)又被成為網(wǎng)絡(luò)蜘蛛(Spider),網(wǎng)絡(luò)機(jī)器人,網(wǎng)頁追逐者,它是一種按照一定規(guī)則,自動(dòng)的抓取萬維網(wǎng)信息的程序或者腳本。
【狹義與廣義定義】
狹義上指遵循標(biāo)準(zhǔn)的http協(xié)議,利用超鏈接和Web文檔檢索方法遍歷萬維網(wǎng)的軟件程序。
廣義的定義則是能遵循h(huán)ttp協(xié)議,檢索web文檔的軟件都稱之為網(wǎng)絡(luò)爬蟲。
網(wǎng)絡(luò)爬蟲的用途
- 主要用途:數(shù)據(jù)采集。
- 金融:金融新聞/數(shù)據(jù),制定投資策略,進(jìn)行量化交易;
- 旅游:各類信息,優(yōu)化出行策略;
- 電商:商品信息,比價(jià)系統(tǒng);
- 游戲:游戲論壇,調(diào)整游戲運(yùn)營;
- 銀行:個(gè)人交易信息,征信系統(tǒng)/貸款評(píng)級(jí);
- 招聘:職位信息,崗位信息;
- 輿情:各大論壇,社會(huì)群體感知,輿論導(dǎo)向;
- 其他用途:12306搶票、各種搶購、投票、刷票、短信轟炸、網(wǎng)絡(luò)攻擊、Web漏洞掃描器等。
網(wǎng)絡(luò)爬蟲是否合法?
從目前的實(shí)現(xiàn)來看,如果抓取數(shù)據(jù)的行為用于個(gè)人使用,則不存在問題;而如果數(shù)據(jù)用于轉(zhuǎn)載或者商業(yè)用途,那么抓取的數(shù)據(jù)類型就非常關(guān)鍵。
從很多歷史案件來看,當(dāng)抓取的數(shù)據(jù)是現(xiàn)實(shí)生活中的真實(shí)數(shù)據(jù)(比如,營業(yè)地址、電話清單等)時(shí),是允許轉(zhuǎn)載的。但是,如果是原創(chuàng)數(shù)據(jù)(比如,意見和評(píng)論),通常則會(huì)受到版權(quán)的限制。
無論如何,當(dāng)你抓取某個(gè)網(wǎng)站的數(shù)據(jù)時(shí),請(qǐng)記住自己是該網(wǎng)站的訪客,應(yīng)當(dāng)約束自己的抓取行為,否則他們可能會(huì)封禁你的IP,甚至采取更進(jìn)一步的法律行動(dòng)。這就要求下載請(qǐng)求的速度限定在一個(gè)合理值之內(nèi),并且還需要設(shè)定一個(gè)專屬的用戶代理來標(biāo)識(shí)自己。
反爬蟲
初學(xué)者寫的爬蟲:簡(jiǎn)單粗暴,不管對(duì)終端服務(wù)器的壓力,甚至?xí)丫W(wǎng)站爬掛掉了,服務(wù)器對(duì)其進(jìn)行封禁;
數(shù)據(jù)保護(hù):很多的數(shù)據(jù)對(duì)某些公司網(wǎng)站來說是比較重要的,不希望被別人爬取(比如,天眼查);
商業(yè)競(jìng)爭(zhēng)問題:比如京東和天貓,假如京東內(nèi)部通過程序爬取天貓所有的商品信息,從而做對(duì)應(yīng)策略,這樣對(duì)天貓來說就造成了非常大的競(jìng)爭(zhēng)。
網(wǎng)絡(luò)爬蟲的分類
根據(jù)使用場(chǎng)景,網(wǎng)絡(luò)爬蟲可分為通用爬蟲和聚焦爬蟲兩種。
通用爬蟲:搜索引擎和Web服務(wù)商用的爬蟲系統(tǒng)。通用網(wǎng)絡(luò)爬蟲是搜索引起抓取系統(tǒng)(Baidu、Google、Yahoo等)的重要組成部分,主要目的是將互聯(lián)網(wǎng)上的網(wǎng)頁下載到本地,形成一個(gè)互聯(lián)網(wǎng)內(nèi)容的鏡像備份。
聚焦爬蟲:是“面向特定主題需求”的一種網(wǎng)絡(luò)爬蟲程序,它與通用搜索引擎爬蟲的區(qū)別在于,聚焦爬蟲在實(shí)施網(wǎng)頁抓取時(shí)會(huì)對(duì)內(nèi)容進(jìn)行處理篩選,盡量保證只抓取與需求相關(guān)的網(wǎng)頁信息。
【通用搜索引擎工作原理】
盡可能的把互聯(lián)網(wǎng)上的所有網(wǎng)頁下載下來,放到本地服務(wù)器里形成備份,再對(duì)這些網(wǎng)頁做相關(guān)處理(提取關(guān)鍵字、去掉廣告),最后提供一個(gè)用戶檢索接口;
通用網(wǎng)絡(luò)爬蟲從互聯(lián)網(wǎng)中搜集網(wǎng)頁,采集信息,這些網(wǎng)頁信息用于為搜索引擎建立索引從而提供支持,它決定著整個(gè)引擎系統(tǒng)的內(nèi)容是否豐富,信息是否即時(shí),因?yàn)槠湫阅艿膬?yōu)劣直接影響著搜索引起的效果。
第一步:抓取網(wǎng)頁(遞歸)
首先選取一部分種子URL,把這些URL放到待爬取隊(duì)列;
從隊(duì)列取出URL,然后解析DNS得到主機(jī)IP,然后保存這個(gè)IP對(duì)應(yīng)服務(wù)器的HTML頁面到搜索引擎的本級(jí)服務(wù)器,之后把這個(gè)爬過的URL放入已經(jīng)爬過的隊(duì)列;
分析網(wǎng)頁內(nèi)容,找出網(wǎng)頁里其他的URL鏈接,繼續(xù)執(zhí)行上面一步,直到爬取結(jié)束。
第二步:數(shù)據(jù)存儲(chǔ)
搜索引擎通過爬蟲爬取到的網(wǎng)頁,將數(shù)據(jù)存入原始頁面數(shù)據(jù)庫,其中的頁面數(shù)據(jù)與用戶瀏覽器得到的HTML是完全一樣的;
搜索引擎蜘蛛在抓取頁面的時(shí)候,也做一定的重復(fù)內(nèi)容檢測(cè),一旦遇到訪問權(quán)重很低的網(wǎng)站上有大量抄襲、采集或者復(fù)制的內(nèi)容,很可能就不再爬行。
第三步:數(shù)據(jù)預(yù)處理,搜索引擎將爬蟲爬取回來的頁面,進(jìn)行各種步驟的預(yù)處理
- 提取文字
- 中文分詞
- 消除噪音(比如版權(quán)聲明文字、導(dǎo)航條、廣告等)
- 索引處理
- 鏈接關(guān)系計(jì)算
- 特殊文件處理
第四步:提供檢索服務(wù),網(wǎng)站排名
搜索引擎對(duì)信息進(jìn)行組織和處理后,為用戶提供關(guān)鍵字檢索服務(wù),將用戶檢索相關(guān)的信息展示給用戶;
同時(shí)會(huì)根據(jù)頁面的PageRank值(鏈接的訪問量排名)來進(jìn)行網(wǎng)站排名,這樣Rank值高的網(wǎng)站在搜索結(jié)果中會(huì)排名較前,當(dāng)然也可以直接使用Money購買搜索引擎網(wǎng)站排名,簡(jiǎn)單粗暴。
?
通用搜索引起的局限性
通用搜索引起所返回的結(jié)果都是網(wǎng)頁,而大多情況下,網(wǎng)頁里面90%的內(nèi)容對(duì)用戶來說都是無用的;
不同領(lǐng)域、不同背景的用戶往往具有不同的檢索目的和需求,搜索引起無法提供針對(duì)具體某個(gè)用戶的搜索結(jié)果;
萬維網(wǎng)數(shù)據(jù)形式的豐富和網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,圖片、數(shù)據(jù)庫、音頻、視頻多媒體等不同數(shù)據(jù)大量出現(xiàn),通過搜索引擎對(duì)這些文件無能為力,不能很好地發(fā)現(xiàn)和獲取;
通用搜索引擎大多提供基于關(guān)鍵字地檢索,難以支持根據(jù)語義信息提出地查詢,無法準(zhǔn)確理解用戶地具體需求。
解決通用爬蟲的缺點(diǎn),聚焦爬蟲出現(xiàn)了。
聚焦爬蟲,爬蟲程序員寫的針對(duì)某種特定內(nèi)容的爬蟲;
面向主題爬蟲、面向需求爬蟲:會(huì)針對(duì)某種特定的內(nèi)容取爬取信息,而且保證內(nèi)容需求盡可能相關(guān)。
聚焦爬蟲流程:
聚焦爬蟲根據(jù)一定的網(wǎng)頁分析算法過濾與主題無關(guān)的鏈接,保留有用的鏈接并將其放入等待抓取的URL隊(duì)列。然后,它根據(jù)一定的搜索策略從隊(duì)列中選擇下一步要抓取的網(wǎng)頁的URL,并重復(fù)上述過程,直到達(dá)到系統(tǒng)的某一條件時(shí)停止。
?
URL搜索策略
- 基于IP地址搜索策略
- 廣度優(yōu)先
- 深度優(yōu)先
- 最佳優(yōu)先
基于IP地址搜索策略
先賦予爬蟲一個(gè)起始的IP地址,然后根據(jù)IP地址遞增的方式搜索本端口地址段后的每一個(gè)WWW地址中的文檔,它完全不考慮各個(gè)文檔中指向其他Web站點(diǎn)的超級(jí)鏈接地址。
優(yōu)點(diǎn)是搜索全面,能夠發(fā)現(xiàn)那些沒被其他文檔引用的新文檔的信息源。
缺點(diǎn)是不適合大規(guī)模搜索。
廣度優(yōu)先搜索策略
廣度優(yōu)先搜索策略是指在抓取過程中,在完成當(dāng)前層次的搜索后,才進(jìn)行下一層次的搜索。這樣逐層搜索,依此類推。
該算法的設(shè)計(jì)和實(shí)現(xiàn)相對(duì)簡(jiǎn)單,為覆蓋盡可能多的網(wǎng)頁,一般使用廣度優(yōu)先搜索方法。
?
深度優(yōu)先搜索策略
深度優(yōu)先搜索策略在開發(fā)網(wǎng)絡(luò)爬蟲早期使用較多的方法之一,目的是要達(dá)到葉結(jié)點(diǎn),即那些不包含任何超鏈接的頁面文件。
從起始頁開始在當(dāng)前HTML文件中,當(dāng)一個(gè)超鏈接被選擇后,被鏈接的HTML文件將執(zhí)行深度優(yōu)先搜索,一個(gè)一個(gè)鏈接跟蹤下去,處理完這條路線之后再轉(zhuǎn)入下一個(gè)起始頁,繼續(xù)跟蹤鏈接,即在搜索其余的超鏈接結(jié)果之前必須先完整地搜索單獨(dú)的一條鏈。當(dāng)不再有其他超鏈可選擇時(shí),說明搜索已經(jīng)結(jié)束。
?
最佳優(yōu)先搜索策略
最佳優(yōu)先搜索策略按照一定的網(wǎng)頁分析算法,先計(jì)算出URL描述文本的目標(biāo)網(wǎng)頁的相似度,設(shè)定一個(gè)值,并選取評(píng)價(jià)得分超過該值的一個(gè)或者幾個(gè)URL進(jìn)行抓取。它只訪問經(jīng)過網(wǎng)頁分析算法計(jì)算出的相關(guān)度大于給定的值的網(wǎng)頁。
存在的一個(gè)問題是,在爬蟲抓取路徑上的很多相關(guān)網(wǎng)頁可能被忽略,因?yàn)樽罴褍?yōu)先策略是一種局部最佳搜索算法。因此需要將最佳先結(jié)合具體的應(yīng)用進(jìn)行改進(jìn),以跳出局部最優(yōu)點(diǎn)。
有研究表明,這樣的閉環(huán)調(diào)整可以將無關(guān)的網(wǎng)頁數(shù)量降低30%~90%。
總結(jié)
以上是生活随笔為你收集整理的【Python 爬虫】 1、爬虫基础概念的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【学习笔记】34、函数是Python的头
- 下一篇: 【Python 爬虫】 2、HTTP基本