爬蟲過程中也會(huì)經(jīng)歷一些絕望啊,比如被網(wǎng)站封IP、比如各種奇怪的驗(yàn)證碼、userAgent訪問限制、各種動(dòng)態(tài)加載等等。下面是小編為您整理的關(guān)于python爬蟲是什么意思,希望對(duì)你有所幫助。
?
python爬蟲是什么意思 ?
python爬蟲即網(wǎng)絡(luò)爬蟲,網(wǎng)絡(luò)爬蟲是一種程序,主要用于搜索引擎,它將一個(gè)網(wǎng)站的所有內(nèi)容與鏈接進(jìn)行閱讀,并建立相關(guān)的全文索引到數(shù)據(jù)庫中,然后跳到另一個(gè)網(wǎng)站.樣子好像一只大蜘蛛. ?
當(dāng)人們?cè)诰W(wǎng)絡(luò)上(如google)搜索關(guān)鍵字時(shí),其實(shí)就是比對(duì)數(shù)據(jù)庫中的內(nèi)容,找出與用戶相符合的.網(wǎng)絡(luò)爬蟲程序的質(zhì)量決定了搜索引擎的能力,如google的搜索引擎明顯要比百度好,就是因?yàn)樗木W(wǎng)絡(luò)爬蟲程序高效,編程結(jié)構(gòu)好. ?
網(wǎng)絡(luò)爬蟲原理 ?
Web網(wǎng)絡(luò)爬蟲系統(tǒng)的功能是下載網(wǎng)頁數(shù)據(jù),為搜索引擎系統(tǒng)提供數(shù)據(jù)來源。很多大型的網(wǎng)絡(luò)搜索引擎系統(tǒng)都被稱為基于 Web數(shù)據(jù)采集的搜索引擎系統(tǒng),比如 Google、Baidu。由此可見Web 網(wǎng)絡(luò)爬蟲系統(tǒng)在搜索引擎中的重要性。網(wǎng)頁中除了包含供用戶閱讀的文字信息外,還包含一些超鏈接信息。Web網(wǎng)絡(luò)爬蟲系統(tǒng)正是通過網(wǎng)頁中的超連接信息不斷獲得網(wǎng)絡(luò)上的其它網(wǎng)頁。正是因?yàn)檫@種采集過程像一個(gè)爬蟲或者蜘蛛在網(wǎng)絡(luò)上漫游,所以它才被稱為網(wǎng)絡(luò)爬蟲系統(tǒng)或者網(wǎng)絡(luò)蜘蛛系統(tǒng),在英文中稱為Spider或者Crawler。 ?
Web網(wǎng)絡(luò)爬蟲系統(tǒng)一般會(huì)選擇一些比較重要的、出度(網(wǎng)頁中鏈出超鏈接數(shù))較大的網(wǎng)站的URL作為種子URL集合。網(wǎng)絡(luò)爬蟲系統(tǒng)以這些種子集合作為初始URL,開始數(shù)據(jù)的抓取。因?yàn)榫W(wǎng)頁中含有鏈接信息,通過已有網(wǎng)頁的 URL會(huì)得到一些新的 URL,可以把網(wǎng)頁之間的指向結(jié)構(gòu)視為一個(gè)森林,每個(gè)種子URL對(duì)應(yīng)的網(wǎng)頁是森林中的一棵樹的根節(jié)點(diǎn)。這樣,Web網(wǎng)絡(luò)爬蟲系統(tǒng)就可以根據(jù)廣度優(yōu)先算法或者深度優(yōu)先算法遍歷所有的網(wǎng)頁。由于深度優(yōu)先搜索算法可能會(huì)使爬蟲系統(tǒng)陷入一個(gè)網(wǎng)站內(nèi)部,不利于搜索比較靠近網(wǎng)站首頁的網(wǎng)頁信息,因此一般采用廣度優(yōu)先搜索算法采集網(wǎng)頁。Web網(wǎng)絡(luò)爬蟲系統(tǒng)首先將種子URL放入下載隊(duì)列,然后簡(jiǎn)單地從隊(duì)首取出一個(gè)URL下載其對(duì)應(yīng)的網(wǎng)頁。得到網(wǎng)頁的內(nèi)容將其存儲(chǔ)后,再經(jīng)過解析網(wǎng)頁中的鏈接信息可以得到一些新的URL,將這些URL加入下載隊(duì)列。然后再取出一個(gè)URL,對(duì)其對(duì)應(yīng)的網(wǎng)頁進(jìn)行下載,然后再解析,如此反復(fù)進(jìn)行,直到遍歷了整個(gè)網(wǎng)絡(luò)或者滿足某種條件后才會(huì)停止下來。 ?
學(xué)習(xí) Python 包并實(shí)現(xiàn)基本的爬蟲過程 ?
大部分爬蟲都是按“發(fā)送請(qǐng)求——獲得頁面——解析頁面——抽取并儲(chǔ)存內(nèi)容”這樣的流程來進(jìn)行,這其實(shí)也是模擬了我們使用瀏覽器獲取網(wǎng)頁信息的過程。 ?
Python中爬蟲相關(guān)的包很多:urllib、requests、bs4、scrapy、pyspider 等,建議從requests+Xpath 開始,requests 負(fù)責(zé)連接網(wǎng)站,返回網(wǎng)頁,Xpath 用于解析網(wǎng)頁,便于抽取數(shù)據(jù)。 ?
如果你用過 BeautifulSoup,會(huì)發(fā)現(xiàn) Xpath 要省事不少,一層一層檢查元素代碼的工作,全都省略了。這樣下來基本套路都差不多,一般的靜態(tài)網(wǎng)站根本不在話下,豆瓣、糗事百科、騰訊新聞等基本上都可以上手了。 ?
當(dāng)然如果你需要爬取異步加載的網(wǎng)站,可以學(xué)習(xí)瀏覽器抓包分析真實(shí)請(qǐng)求或者學(xué)習(xí)Selenium來實(shí)現(xiàn)自動(dòng)化,這樣,知乎、時(shí)光網(wǎng)、貓途鷹這些動(dòng)態(tài)的網(wǎng)站也可以迎刃而解。 ?
學(xué)習(xí)數(shù)據(jù)庫基礎(chǔ),應(yīng)對(duì)大規(guī)模數(shù)據(jù)存儲(chǔ) ?
爬回來的數(shù)據(jù)量小的時(shí)候,你可以用文檔的形式來存儲(chǔ),一旦數(shù)據(jù)量大了,這就有點(diǎn)行不通了。所以掌握一種數(shù)據(jù)庫是必須的,學(xué)習(xí)目前比較主流的 MongoDB 就OK。 ?
MongoDB 可以方便你去存儲(chǔ)一些非結(jié)構(gòu)化的數(shù)據(jù),比如各種評(píng)論的文本,圖片的鏈接等等。你也可以利用PyMongo,更方便地在Python中操作MongoDB。 ?
因?yàn)檫@里要用到的數(shù)據(jù)庫知識(shí)其實(shí)非常簡(jiǎn)單,主要是數(shù)據(jù)如何入庫、如何進(jìn)行提取,在需要的時(shí)候再學(xué)習(xí)就行。 ?
網(wǎng)絡(luò)爬蟲的基本工作流程如下: ?
1.首先選取一部分精心挑選的種子URL; ?
2.將這些URL放入待抓取URL隊(duì)列; ?
3.從待抓取URL隊(duì)列中取出待抓取在URL,解析DNS,并且得到主機(jī)的ip,并將URL對(duì)應(yīng)的網(wǎng)頁下載下來,存儲(chǔ)進(jìn)已下載網(wǎng)頁庫中。此外,將這些URL放進(jìn)已抓取URL隊(duì)列;
?
4.分析已抓取URL隊(duì)列中的URL,分析其中的其他URL,并且將URL放入待抓取URL隊(duì)列,從而進(jìn)入下一個(gè)循環(huán)。 ?
2.3 抓取策略 ?
在爬蟲系統(tǒng)中,待抓取URL隊(duì)列是很重要的一部分。待抓取URL隊(duì)列中的URL以什么樣的順序排列也是一個(gè)很重要的問題,因?yàn)檫@涉及到先抓取那個(gè)頁面,后抓取哪個(gè)頁面。而決定這些URL排列順序的方法,叫做抓取策略。下面重點(diǎn)介紹幾種常見的抓取策略: ?
2.3.1 深度優(yōu)先遍歷策略 ?
深度優(yōu)先遍歷策略是指網(wǎng)絡(luò)爬蟲會(huì)從起始頁開始,一個(gè)鏈接一個(gè)鏈接跟蹤下去,處理完這條線路之后再轉(zhuǎn)入下一個(gè)起始頁,繼續(xù)跟蹤鏈接。我們以下面的圖為例: ?
遍歷的路徑:A-F-G E-H-I B C D ?
2.3.2 寬度優(yōu)先遍歷策略 ?
寬度優(yōu)先遍歷策略的基本思路是,將新下載網(wǎng)頁中發(fā)現(xiàn)的鏈接直接**待抓取URL隊(duì)列的末尾。也就是指網(wǎng)絡(luò)爬蟲會(huì)先抓取起始網(wǎng)頁中鏈接的所有網(wǎng)頁,然后再選擇其中的一個(gè)鏈接網(wǎng)頁,繼續(xù)抓取在此網(wǎng)頁中鏈接的所有網(wǎng)頁。還是以上面的圖為例: ?
遍歷路徑:A-B-C-D-E-F G H I ?
2.3.3 反向鏈接數(shù)策略 ?
反向鏈接數(shù)是指一個(gè)網(wǎng)頁被其他網(wǎng)頁鏈接指向的數(shù)量。反向鏈接數(shù)表示的是一個(gè)網(wǎng)頁的內(nèi)容受到其他人的推薦的程度。因此,很多時(shí)候搜索引擎的抓取系統(tǒng)會(huì)使用這個(gè)指標(biāo)來評(píng)價(jià)網(wǎng)頁的重要程度,從而決定不同網(wǎng)頁的抓取先后順序。 ?
在真實(shí)的網(wǎng)絡(luò)環(huán)境中,由于廣告鏈接、作弊鏈接的存在,反向鏈接數(shù)不能完全等他我那個(gè)也的重要程度。因此,搜索引擎往往考慮一些可靠的反向鏈接數(shù)。 ?
2.3.4 Partial PageRank策略 ?
Partial PageRank算法借鑒了PageRank算法的思想:對(duì)于已經(jīng)下載的網(wǎng)頁,連同待抓取URL隊(duì)列中的URL,形成網(wǎng)頁集合,計(jì)算每個(gè)頁面的PageRank值,計(jì)算完之后,將待抓取URL隊(duì)列中的URL按照PageRank值的大小排列,并按照該順序抓取頁面。 ?
如果每次抓取一個(gè)頁面,就重新計(jì)算PageRank值,一種折中方案是:每抓取K個(gè)頁面后,重新計(jì)算一次PageRank值。但是這種情況還會(huì)有一個(gè)問題:對(duì)于已經(jīng)下載下來的頁面中分析出的鏈接,也就是我們之前提到的未知網(wǎng)頁那一部分,暫時(shí)是沒有PageRank值的。為了解決這個(gè)問題,會(huì)給這些頁面一個(gè)臨時(shí)的PageRank值:將這個(gè)網(wǎng)頁所有入鏈傳遞進(jìn)來的PageRank值進(jìn)行匯總,這樣就形成了該未知頁面的PageRank值,從而參與排序。 ?
2.3.5 OPIC策略策略 ?
該算法實(shí)際上也是對(duì)頁面進(jìn)行一個(gè)重要性打分。在算法開始前,給所有頁面一個(gè)相同的初始現(xiàn)金(cash)。當(dāng)下載了某個(gè)頁面P之后,將P的現(xiàn)金分?jǐn)偨o所有從P中分析出的鏈接,并且將P的現(xiàn)金清空。對(duì)于待抓取URL隊(duì)列中的所有頁面按照現(xiàn)金數(shù)進(jìn)行排序。 ?
2.3.6 大站優(yōu)先策略 ?
對(duì)于待抓取URL隊(duì)列中的所有網(wǎng)頁,根據(jù)所屬的網(wǎng)站進(jìn)行分類。對(duì)于待下載頁面數(shù)多的網(wǎng)站,優(yōu)先下載。這個(gè)策略也因此叫做大站優(yōu)先策略。 ?