網絡爬蟲是什麼?

互聯網誕生之初,是爲了讓人們更容易的分享數據、交流通信。互聯網是橋樑,鏈接了世界各地的人們。網站的點擊、瀏覽都是人爲的,與你聊天的也是活生生的人。然而,隨着技術的發展,人們對數據的渴望,出現了各類網絡機器人,這個時候,你不知道屏幕那端跟你聊天的是一我的仍是一條狗,你也不知道你網站的瀏覽量是人點擊出來的,仍是機器爬出來的。python

表面上看,互聯網上是各類各樣的人;暗地裏,已經佈滿了形形色色的網絡爬蟲。web

1、搜索引擎時代的網絡爬蟲算法

關於網絡爬蟲的概念,咱們先來瞅瞅維基百科(Wikipedia)上面的定義:數據庫

網絡爬蟲(英語:web crawler),也叫網上蜘蛛(spider),是一種用來自動瀏覽萬維網的網絡機器人。其目的通常爲編纂網絡索引。django

這裏提到的編纂網絡索引,就是搜索引擎乾的事情。咱們對搜索引擎並不陌生,Google、百度等搜索引擎可能天天都在幫咱們快速得到信息。可能小猿們要問,搜索引擎的工做過程是怎樣的呢?編程

首先,就是有網絡爬蟲不斷抓取各個網站的網頁,存放到搜索引擎的數據庫; 接着,索引程序讀取數據庫的網頁進行清理,創建倒排索引; 最後,搜索程序接收用戶的查詢關鍵詞,去索引裏面找到相關內容,並經過必定的排序算法(Pagerank等)把最相關最好的結果排在最前面呈現給用戶。瀏覽器

看上去簡簡單單的三個部分,卻構成了強大複雜的搜索引擎系統。而網絡爬蟲是其中最基礎也很重要的一部分,它決定着搜索引擎數據的完整性和豐富性。咱們也看到網絡爬蟲的主要做用是獲取數據。服務器

由此簡單地說,網絡爬蟲就是獲取互聯網公開數據的自動化工具。網絡

這裏要強調一下,網絡爬蟲爬取的是互聯網上的公開數據,而不是經過特殊技術非法入侵到網站服務器獲取的非公開數據。併發

可能你要問,什麼是「公開數據」呢?簡而言之,就是網站上公開讓用戶瀏覽、獲取的數據。

雖然數據是公開的,可是當某人或機構(如,搜索引擎)大量收集這些數據並所以獲利時,也會讓數據生產方——網站很不爽,由此而產生法律糾紛。好比,早些年Google所以而惹上官司。

網站們看着搜索引擎由於搜索引擎抓取本身的內容而獲利不爽,但也由於搜索引擎帶來的流量而高興不已,因而就出現了網站主動進行搜索引擎優化(SEO, Search Engine Optimization),也就是告訴搜索引擎,我這裏的內容好,快來抓取吧!

搜索引擎和網站的博弈,催生了一個君子協議: robots.txt。網站在本身的網站上放上這個文件,告訴爬蟲哪些內容能夠抓,哪些內容不能夠抓;搜索引擎讀取網站的robots.txt來知道本身的抓取範圍,同時也在訪問網站時經過User-Agent來向網站代表本身的身份(這種代表也是君子協議,技術上很容易假扮他人),好比,Google的爬蟲叫作Googlebot,百度的爬蟲叫作Baiduspider。這樣,兩者和平共處,互惠互利。

2、大數據時代的網絡爬蟲

時代在發展,數據變得愈來愈重要,「大數據」已經成爲各行各業討論的話題,人們對數據的渴望也變成貪婪,數據也就成了「石油」,爬蟲也就成了「鑽井機」。

爲了獲取石油,人們使用鑽井機;爲了獲取數據,人們使用爬蟲。爲了得到數據,人們把互聯網鑽的是「千瘡百孔」。哈哈,這裏有些誇張。但人們對數據的獲取,已經打破的君子協定,和網站們玩起了貓捉老鼠的遊戲,展開了道高一尺魔高一丈的較量。

爲何說是較量呢?由於大量爬蟲的行爲會給網站帶來網絡帶寬、服務器計算力等方面很大的壓力,卻幾乎不帶來任何利益。爲了下降這種毫無利益的壓力和避免本身的數據被他人集中收集,網站確定要經過技術手段來限制爬蟲;另外一方面,爬蟲爲了獲取石油般的數據,就千方百計來突破這種限制。

對於這種較量的理解,仍是看活生生的例子來得更透徹。

你有沒有花幾十塊錢讓某個軟件幫你搶火車票? 攻: 搶票爬蟲會不斷訪問12306來得到火車票座位數據,並進而購買火車票; 防: 12306網站出了變態的認證碼,人都常常識別錯誤。 各類秒殺讓你很受傷! 攻: 研究網站的秒殺機制,提早寫好爬蟲,秒殺時刻,人快不過機器; 防: 有些秒殺的宣傳做用很大就懶得防;有些秒殺機制複雜到你很難寫出對應的爬蟲;有些秒殺成功被發現做弊也會被取消。 爬蟲變得愈來愈多,愈來愈肆無忌憚,網站也不得不使用各類技術手段來禁止或限制爬蟲。這些手段大體包括:

使用帳戶保護數據,數據僅對登陸用戶可見; 數據屢次異步加載; 限制IP訪問頻率,甚至封鎖IP; 輸入驗證碼以得到訪問權限; 數據在服務器端加密,瀏覽器端解密; …… 而這些手段也是爬蟲在技術實現中要解決和突破的問題。

3、網絡爬蟲的自我約束

看完上面「貓捉老鼠」的遊戲的描述,小猿們不由要問,網站和爬蟲這種對抗較量會不會引發法律問題? 這是一個很好的問題,也是值得每一個爬蟲開發者思考的問題。

爬蟲做爲一種技術自己可能無所謂善惡,可是使用它的人就有善惡之分。如何使用爬蟲,爬取的數據如何使用,均可能產生潛在的法律問題。做爲技術開發的小猿們,都應該思考這個問題。不管何種目的,網絡爬蟲都不能突破法律的底線,同時也有遵照必定的準則:

遵循robots.txt協議; 避免短期高併發訪問目標網站,避免干擾目標網站的正常運行; 不要抓取我的信息,好比手機通信錄等; 使用抓來的數據注意隱私保護,合法合規。

若是你依然在編程的世界裏迷茫,不知道本身的將來規劃,能夠加入咱們的Python學習扣qun:784758214,看看前輩們是如何學習的!交流經驗! 本身是一名高級python開發工程師,從基礎的python腳本到web開發、爬蟲、django、人工智能、數據挖掘等,零基礎到項目實戰的資料都有整理。 送給每一位python的小夥伴!分享一些學習的方法和須要注意的小細節,這裏是python學習者彙集地

點擊:python技術分享

相關文章
相關標籤/搜索