探索java網(wǎng)絡(luò)爬蟲

網(wǎng)絡(luò)爬蟲簡介

網(wǎng)絡(luò)爬蟲椰苟,是一種按照一定的規(guī)則磁餐,自動(dòng)地抓取萬維網(wǎng)信息的程序或者腳本,它們被廣泛用于互聯(lián)網(wǎng)搜索引擎或其他類似網(wǎng)站幼衰,可以自動(dòng)采集所有其能夠訪問到的頁面內(nèi)容靴跛,以獲取或更新這些網(wǎng)站的內(nèi)容和檢索方式。

從功能上來講渡嚣,爬蟲一般分為數(shù)據(jù)采集梢睛,處理,儲(chǔ)存三個(gè)部分识椰。傳統(tǒng)爬蟲從一個(gè)或若干初始網(wǎng)頁的URL開始绝葡,獲得初始網(wǎng)頁上的URL,在抓取網(wǎng)頁的過程中腹鹉,不斷從當(dāng)前頁面上抽取新的URL放入隊(duì)列,直到滿足系統(tǒng)的一定停止條件藏畅。聚焦爬蟲的工作流程較為復(fù)雜,需要根據(jù)一定的網(wǎng)頁分析算法過濾與主題無關(guān)的鏈接功咒,保留有用的鏈接并將其放入等待抓取的URL隊(duì)列愉阎。然后绞蹦,它將根據(jù)一定的搜索策略從隊(duì)列中選擇下一步要抓取的網(wǎng)頁URL,并重復(fù)上述過程榜旦,直到達(dá)到系統(tǒng)的某一條件時(shí)停止幽七。另外,所有被爬蟲抓取的網(wǎng)頁將會(huì)被系統(tǒng)存貯章办,進(jìn)行一定的分析锉走、過濾,并建立索引藕届,以便之后的查詢和檢索挪蹭;對(duì)于聚焦爬蟲來說,這一過程所得到的分析結(jié)果還可能對(duì)以后的抓取過程給出反饋和指導(dǎo)休偶。

網(wǎng)絡(luò)爬蟲有很多種方式梁厉,比較常見的是python爬蟲,java爬蟲踏兜,Go爬蟲词顾,本文主要介紹的是java網(wǎng)絡(luò)爬蟲。

java網(wǎng)絡(luò)爬蟲關(guān)鍵技術(shù)及難點(diǎn)

java網(wǎng)絡(luò)爬蟲關(guān)鍵技術(shù)主要包括頁面解析技術(shù)碱妆,URL處理肉盹,數(shù)據(jù)存儲(chǔ),爬行策略疹尾,反爬蟲應(yīng)對(duì)策略上忍,爬蟲時(shí)效等。

頁面解析技術(shù)用的比較多的比如正則表達(dá)式解析纳本,jsoup解析器窍蓝,Selenium等,正則表示式和jSelenium這里就不多做介紹了繁成,jsoup 是一款開源Java 的HTML解析器吓笙,可直接解析某個(gè)URL地址、HTML文本內(nèi)容巾腕。它提供了一套非常省力的API面睛,可通過DOM,CSS以及類似于jQuery的操作方法來取出和操作數(shù)據(jù)祠墅。jsoup 可以從包括字符串侮穿、URL 地址以及本地文件來加載 HTML 文檔,并生成 Document 對(duì)象實(shí)例毁嗦,通過DOM對(duì)象來解析獲取需求數(shù)據(jù)亲茅。

URL處理包括URL的解析,URL選取,URL存儲(chǔ)克锣,URL調(diào)度等茵肃,爬蟲首先有一個(gè)目標(biāo)網(wǎng)站等URL,從目標(biāo)URL中爬取頁面內(nèi)容解析需要等URL袭祟,并對(duì)URL根據(jù)特定對(duì)規(guī)則進(jìn)行賽選并存儲(chǔ)在URL隊(duì)列中验残,根據(jù)制定對(duì)策略進(jìn)行URL調(diào)度爬取網(wǎng)頁內(nèi)容。這里主要介紹一些URL存儲(chǔ)和調(diào)度巾乳,由于爬蟲系統(tǒng)一般都是分布式的您没,存儲(chǔ)上選取高性能的緩存數(shù)據(jù)庫redis,存儲(chǔ)和讀取數(shù)據(jù)非常高效胆绊,且支持的數(shù)據(jù)類型豐富氨鹏,采用list 和 set兩種數(shù)據(jù)結(jié)構(gòu)結(jié)合來存儲(chǔ)URL并可以設(shè)定優(yōu)先級(jí)順序,在調(diào)度時(shí)根據(jù)設(shè)定的優(yōu)先級(jí)順序來獲取redis存儲(chǔ)對(duì)象拿到URL進(jìn)行依次調(diào)度爬取網(wǎng)頁內(nèi)容压状。在URL調(diào)度時(shí)仆抵,還需要對(duì)請(qǐng)求響應(yīng)的結(jié)果進(jìn)行管理,同樣存儲(chǔ)到Redis中种冬,記錄為響應(yīng)成功的URL隊(duì)列和處理異常的URL隊(duì)列镣丑,后續(xù)看調(diào)度策略再對(duì)異常的URL隊(duì)列進(jìn)行處理。

數(shù)據(jù)存儲(chǔ)即對(duì)爬取到的有效數(shù)據(jù)進(jìn)行存儲(chǔ)入庫娱两,一般比較常用的是HBase 和 Mysql莺匠。對(duì)于網(wǎng)絡(luò)爬蟲來說,一般都是爬取的特定數(shù)據(jù)十兢,具有一定形態(tài)的數(shù)據(jù)慨蛙,一般都可以用關(guān)系型數(shù)據(jù)庫來進(jìn)行存儲(chǔ),本文就選取Mysql來介紹爬蟲的數(shù)據(jù)存儲(chǔ)纪挎。對(duì)于分布式的爬蟲系統(tǒng),寫入數(shù)據(jù)操作一般都是高并發(fā)跟匆,如果直接寫庫對(duì)數(shù)據(jù)庫壓力太大异袄,很容易造成IO阻塞。一般解決辦法是用緩存來輔助玛臂,先把數(shù)據(jù)存到緩存中烤蜕,然后在同步到數(shù)據(jù)庫,由于并發(fā)較大迹冤,對(duì)緩存要求也比較高讽营。另一個(gè)辦法可以使用消息隊(duì)列來做緩沖,寫入數(shù)據(jù)先進(jìn)消息隊(duì)列泡徙,然后在入庫橱鹏,并對(duì)數(shù)據(jù)庫做一定對(duì)分表設(shè)計(jì),來降低數(shù)據(jù)庫并發(fā)壓力。

爬行策略一般包括深度優(yōu)先爬行策略莉兰、廣度優(yōu)先爬行策略挑围、大站優(yōu)先策略、反鏈策略等糖荒,這里就不多做說明杉辙,一般都采用深度優(yōu)先爬行策略。

反爬蟲是一般正規(guī)網(wǎng)站都會(huì)采用的策略捶朵,比如非瀏覽器檢測蜘矢、封 IP、驗(yàn)證碼综看、封賬號(hào)品腹、字體反爬等,所以在爬取過程中必須要針對(duì)這些反爬蟲做相應(yīng)的改進(jìn)策略寓搬。一般服務(wù)器都會(huì)限制IP訪問珍昨,爬蟲系統(tǒng)需要IP代理池的設(shè)計(jì),代理一般可以抓取免費(fèi)代理句喷、購買付費(fèi)代理镣典、使用 Tor 代理、Socks 代理等唾琼,每訪問一次就換隨機(jī)換一個(gè)代理IP兄春,另外,訪問速度也不能太快锡溯,最好做一個(gè)延遲訪問的策略赶舆。限制反爬蟲策略。還有很多網(wǎng)站都要求驗(yàn)證碼祭饭,對(duì)于普通圖形驗(yàn)證碼芜茵,如果非常規(guī)整且沒有變形或干擾,可以使用 OCR 識(shí)別倡蝙,也可以使用機(jī)器學(xué)習(xí)九串、深度學(xué)習(xí)來進(jìn)行模型訓(xùn)練,當(dāng)然打碼平臺(tái)是最方便的方式寺鸥;對(duì)于滑動(dòng)驗(yàn)證碼猪钮,可以使用破解算法,也可以模擬滑動(dòng)胆建。后者的關(guān)鍵在于缺口的找尋烤低,可以使用圖片比對(duì),也可以寫基本的圖形識(shí)別算法笆载,也可以對(duì)接打碼平臺(tái)扑馁,也可以使用深度學(xué)習(xí)訓(xùn)練識(shí)別接口涯呻;對(duì)于算術(shù)題驗(yàn)證碼,推薦直接使用打碼平臺(tái)檐蚜。

一般爬蟲爬取的數(shù)據(jù)量都比較大魄懂,還有各種限制策略,所以如何提升爬蟲的時(shí)效也是一個(gè)實(shí)際的問題闯第,常見的措施有多線程市栗、多進(jìn)程、異步咳短、分布式填帽、細(xì)節(jié)優(yōu)化等×茫可以結(jié)合爬蟲策略及URL調(diào)度來統(tǒng)一整合篡腌,這里做不詳細(xì)說明。

java網(wǎng)絡(luò)爬蟲的主要步驟

一般爬蟲流程主要步驟可以總結(jié)發(fā)起請(qǐng)求勾效、獲取響應(yīng)內(nèi)容嘹悼、解析響應(yīng)內(nèi)容、保存數(shù)據(jù)层宫,總結(jié)來一些參考下面流程圖杨伙。


總結(jié)

java爬蟲說起來是件簡單的事情。但是往往簡單的事情要做到極致就需要克服重重困難萌腿。要設(shè)計(jì)搭建一個(gè)java網(wǎng)絡(luò)爬蟲系統(tǒng)限匣,核心在于對(duì)整個(gè)系統(tǒng)的設(shè)計(jì)以及理解上,希望本文能幫助大家對(duì)java網(wǎng)絡(luò)爬蟲有一定對(duì)理解毁菱。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末米死,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子贮庞,更是在濱河造成了極大的恐慌峦筒,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件窗慎,死亡現(xiàn)場離奇詭異勘天,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)捉邢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來商膊,“玉大人伏伐,你說我怎么就攤上這事≡尾穑” “怎么了藐翎?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵材蹬,是天一觀的道長。 經(jīng)常有香客問我吝镣,道長堤器,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任末贾,我火速辦了婚禮闸溃,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘拱撵。我一直安慰自己辉川,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布拴测。 她就那樣靜靜地躺著乓旗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪集索。 梳的紋絲不亂的頭發(fā)上屿愚,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音务荆,去河邊找鬼妆距。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蛹含,可吹牛的內(nèi)容都是我干的毅厚。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼浦箱,長吁一口氣:“原來是場噩夢啊……” “哼吸耿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起酷窥,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤咽安,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后蓬推,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體妆棒,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年沸伏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了糕珊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡毅糟,死狀恐怖红选,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情姆另,我是刑警寧澤喇肋,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布坟乾,位于F島的核電站,受9級(jí)特大地震影響蝶防,放射性物質(zhì)發(fā)生泄漏甚侣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一间学、第九天 我趴在偏房一處隱蔽的房頂上張望殷费。 院中可真熱鬧,春花似錦菱鸥、人聲如沸宗兼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽殷绍。三九已至,卻和暖如春鹊漠,著一層夾襖步出監(jiān)牢的瞬間主到,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國打工躯概, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留登钥,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓娶靡,卻偏偏與公主長得像牧牢,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子姿锭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容