前言
最近沉寂了幾周,那是因?yàn)樾【幵诼耦^farming催植,學(xué)習(xí)新技術(shù)肮蛹,思考人生……我一直認(rèn)為分享的目的在于自我成長(zhǎng)并造福他人,我們?cè)?jīng)和現(xiàn)在在網(wǎng)路上搜索的資料和方案又何嘗不是別人分享和總結(jié)的呢创南?感謝有那么多人在默默分享和付出……
今天給大家分享一個(gè)小爬蟲方案伦忠,小編很久很久之前就想深入爬蟲的世界,可是放眼大都是Python系列稿辙,雖然用Python很爽很優(yōu)雅昆码,但一直在Java棧里,暫時(shí)不想額外去學(xué)Python邻储,就想玩Java版的爬蟲可實(shí)現(xiàn)嗎赋咽?答案是肯定的,利用jsoup就輕松實(shí)現(xiàn)靜態(tài)頁(yè)面信息抓取……
Jsoup簡(jiǎn)介
百度百科:jsoup 是一款Java 版的HTML解析器吨娜,可直接解析某個(gè)URL地址脓匿、HTML文本內(nèi)容。它提供了一套非常省力的API宦赠,可通過(guò)DOM陪毡,CSS以及類似于jQuery的操作方法來(lái)取出和操作數(shù)據(jù)。
上面的介紹勾扭,最關(guān)鍵就是jsoup是一款Java的HTML解析器毡琉,那么我們可以理解,通過(guò)它提供的API妙色,我們可以像使用jQuery或者WebDriver一樣去查找桅滋、定位甚至操作各種元素標(biāo)簽了。
Jsoup API
官網(wǎng)地址: https://jsoup.org****
java項(xiàng)目對(duì)應(yīng)的jsoup包:https://jsoup.org/download身辨,使用jar或maven丐谋、gradle可按照需要自選。
API 文檔:https://jsoup.org/apidocs/overview-summary.html
下面是包結(jié)構(gòu)煌珊,看包名是不是很好理解笋鄙,用過(guò)WebDriver的童鞋應(yīng)該不會(huì)陌生:
org.jsoup.nodes 類似于 WebElemet 的元素對(duì)象類
org.jsoup.select 類似于元素查找和定位的By類
看英文描述應(yīng)該也不難理解,詳細(xì)的API在使用的時(shí)候直接查API即可怪瓶,這里不詳細(xì)介紹了萧落。
實(shí)戰(zhàn)練習(xí)
膩不膩害践美,拉出來(lái)用用就知道了,那么我們找個(gè)例子來(lái)小小練習(xí)下吧找岖,就實(shí)現(xiàn)下面這個(gè)例子吧:想獲取簡(jiǎn)書首頁(yè)下的所有文章URL
下面擼起袖子開(kāi)干:
1陨倡、分析網(wǎng)頁(yè):
通過(guò)查看網(wǎng)頁(yè)源碼,不難發(fā)現(xiàn)文章的標(biāo)題都是采用<a>標(biāo)簽組織的鏈接许布,那先不管其他的兴革,先把<a href=>這樣的節(jié)點(diǎn)爬出來(lái)再說(shuō),不符合規(guī)則的后面再根據(jù)屬性過(guò)濾就行蜜唾。其實(shí)這個(gè)例子杂曲,已經(jīng)簡(jiǎn)化了過(guò)濾操作,仔細(xì)觀察發(fā)現(xiàn)文章列表都是在列表<li>中袁余,且還有id屬性擎勘,這就大大簡(jiǎn)化了過(guò)濾工作(無(wú)論是UI自動(dòng)化還是爬蟲應(yīng)該都喜歡這樣的頁(yè)面)。
2颖榜、編碼:
新建java- maven項(xiàng)目棚饵,在pom.xml加上jsoup的依賴:
新建測(cè)試類:
代碼就這么簡(jiǎn)單,關(guān)鍵在于節(jié)點(diǎn)過(guò)濾掩完,匹配方式j(luò)soup提供了詳細(xì)的方法噪漾,可以參考API Selector類的說(shuō)明:https://jsoup.org/apidocs/org/jsoup/select/Selector.html
運(yùn)行一下看下效果:
完美輸出了簡(jiǎn)書首頁(yè)的20篇文章地址和標(biāo)題。
總結(jié)
學(xué)會(huì)爬蟲的好處大家都懂且蓬,爬資料欣硼,爬優(yōu)惠信息,爬美女圖片恶阴,爬電影種子分别,爬Japan AV(河蟹)……只有你想不到的,沒(méi)有爬不到的存淫。當(dāng)然這只是一個(gè)小小的示例,但也改變了我之前的認(rèn)知沼填,以為寫爬蟲就只能用Python了找爱,其實(shí)Jsoup也可以輕松實(shí)現(xiàn)的涤姊,但是jsoup只能爬取靜態(tài)頁(yè)面,對(duì)于那些有Ajax交互的URL就難以抓取了,這需要如何做呢沟饥?等我嘗試完各種方法后,找到最優(yōu)的方案再分享給大家……
原文來(lái)自下方公眾號(hào)袱蚓,轉(zhuǎn)載請(qǐng)聯(lián)系作者肮塞,并務(wù)必保留出處。
想第一時(shí)間看到更多原創(chuàng)技術(shù)好文和資料梯澜,請(qǐng)關(guān)注公眾號(hào):測(cè)試開(kāi)發(fā)棧