Jsoup學(xué)習(xí)小案例

  • 使用Jsoup我們的目的就是要獲取網(wǎng)頁的數(shù)據(jù)
    根據(jù)中文文檔學(xué)習(xí)
主要是數(shù)據(jù)的抽瘸簟:
1.使用dom方法來遍歷一個Document對象
  • api
1)遍歷DOM查找元素
  • getElementById(String id):通過id來獲取
  • getElementsByTag(String tagName):通過標(biāo)簽名字來獲取
  • getElementsByClass(String className):通過類名來獲取
  • getElementsByAttribute(String key):通過屬性名字來獲取
  • getElementsByAttributeValue(String key, String value):通過指定的屬性名字,屬性值來獲取
  • getAllElements():獲取所有元素
元素數(shù)據(jù).png
2)選擇器查找

######## public Elements select(String cssQuery)
選擇器的更多語法(可以在org.jsoup.select.Selector中查看到更多關(guān)于選擇器的語法)

  • tagname: 通過標(biāo)簽查找元素,比如:a
  • ns|tag: 通過標(biāo)簽在命名空間查找元素抡蛙,比如:可以用 fb|name 語法來查找 <fb:name> 元素
  • 井id: 通過ID查找元素以蕴,比如:#logo
  • class: 通過class名稱查找元素抬闷,比如:.masthead.
    其他不常用的就在文首的連接中去查詢魔市。

使用案例

感謝 jsoup案例

我們來爬取下蟬游記
網(wǎng)站圖.png

爬取效果圖:

效果爬取圖.png

觀察網(wǎng)頁解構(gòu)

網(wǎng)頁解構(gòu)圖.png

在圖中我們可以看到每個article標(biāo)志就是每篇文章的信息督禽。每篇article外層是被 class名為" trip-list-v2 clearfix "的div包裹颠黎。每個article下還有一層div,該div下有多個child(div.h1.p.a這些標(biāo)簽都是屬于文章的兒子)另锋。分析之后。我們就可以根據(jù)他們的id名狭归,或者class名夭坪,屬性來抽取我們想要的值。

代碼

你可以在Activity中爬取过椎,也可以創(chuàng)建一個類室梅,創(chuàng)建main(String[] args)入口來進(jìn)行測試爬取。

public class JsoupData {
    public static void main(String[] args) throws IOException {
        String neutrl = "http://chanyouji.com/";
        String userAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3423.2 Safari/537.36";
        Connection connect = Jsoup.connect(neutrl);
        connect.header("User-Agent", userAgent);
        Document doc = connect.timeout(5 * 1000).get();
        Element elementDiv = doc.getElementsByClass("trip-list-v2 clearfix").first();
        Elements elementsArticle = elementDiv.getElementsByTag("article");
        for (int i = 0; i < elementsArticle.size(); i++) {
            Element eles = elementsArticle.get(i).child(0);//在article下有多個child
            Elements children = eles.children();
            String title = children.get(1).text();
            String conment = eles.getElementsByTag("p").text();
            String img = children.get(0).select("img").attr("src");
            System.out.print(title + "\n" + conment + "\n" + img + "\n");
        }
    }
}

代碼講解

1.創(chuàng)建類,并創(chuàng)建main方法入口亡鼠。
2.設(shè)置自己想爬取的網(wǎng)址
3.設(shè)置userAgent赏殃,設(shè)置偽裝成瀏覽器。
userAgent的地址间涵。打開自己的瀏覽器仁热。按f12。


image.png

勾哩。復(fù)制下就可以了抗蠢。
4.開始抽取,前面我們都分析過了思劳。

Element elementDiv = doc.getElementsByClass("trip-list-v2 clearfix").first();

根據(jù)“trip-list-v2 clearfix”這個類名迅矛,獲取到Elements列表。我們?nèi)∷谝粋€潜叛,這樣子我們就拿到了trip-list-v2 clearfix名的div容器诬乞。里面包含很多aricle。

 Elements elementsArticle = elementDiv.getElementsByTag("article");

這樣我們就拿到了文章列表钠导。循環(huán)遍歷每篇文章震嫉,獲取文章中的信息。
開始遍歷

 for (int i = 0; i < elementsArticle.size(); i++) {
            Element eles = elementsArticle.get(i).child(0);//在article下的第一個div class=inner的
            Elements children = eles.children();//獲取class=inner的兒子們
            String title = children.get(1).text();//標(biāo)題在class=inner的第二個兒子牡属,下標(biāo)為1票堵。
            String conment = eles.getElementsByTag("p").text();//也可以不用class=inner的兒子的位置來索引。直接用p這個標(biāo)簽來索引是一樣的逮栅。
            String img = children.get(0).select("img").attr("src");//圖片的地址在class=inner的第一個兒子div下悴势。用 children.get(0)獲取到這個div.用select("img"),這個選擇器來選擇img.并獲取到src屬性下的地址措伐。
            System.out.print(title + "\n" + conment + "\n" + img + "\n");
        }

遍歷的分析在上面的代碼中特纤。
5.運(yùn)行該類。就能得到我們想要的數(shù)據(jù)了侥加。

實例2

爬取美食天下地址

目標(biāo)圖.png

網(wǎng)頁分析
image.png

爬取效果圖
image.png
代碼
public class JsoupData {
    public static void main(String[] args) throws IOException {

        String userAgent="Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36";
        Connection connection= Jsoup.connect("https://home.meishichina.com/show-top-type-recipe-page-1.html");
        connection.header("User-Agent",userAgent);
        Document document=connection.timeout(5*1000).get();
        Element div_ul = document.getElementById("J_list");
        Element ul = div_ul.getElementsByTag("ul").first();
        Elements li = ul.getElementsByTag("li");
        for (int i = 0; i < li.size(); i++) {
            Element childpic = li.get(i).child(0);//第一個div
            String pic= childpic.getElementsByTag("img").attr("data-src");//獲取圖片地址捧存,雖然有多層級,但是img的標(biāo)簽只有一個担败,可以直接來獲取
            Element childdetails = li.get(i).child(1);//這是細(xì)節(jié)div
            String title = childdetails.getElementsByTag("h2").text();//在細(xì)節(jié)div下找到h2標(biāo)簽
            String who=childdetails.getElementsByClass("subline").first().getElementsByTag("a").text();
            String yuanliao = childdetails.getElementsByClass("subcontent").text();
            System.out.print(title+"\n原料:"+yuanliao+"\n圖片地址:"+pic+"\n"+"發(fā)布者:"+who+"\n");
        }
    }
}

注意:


image.png

上面獲取圖片寫src昔穴,是獲取不到完整的,斷點調(diào)試發(fā)現(xiàn)用data-src能獲取到提前。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末吗货,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子狈网,更是在濱河造成了極大的恐慌宙搬,老刑警劉巖笨腥,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異勇垛,居然都是意外死亡扇雕,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進(jìn)店門窥摄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來镶奉,“玉大人,你說我怎么就攤上這事崭放∩诳粒” “怎么了?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵币砂,是天一觀的道長建峭。 經(jīng)常有香客問我,道長决摧,這世上最難降的妖魔是什么亿蒸? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮掌桩,結(jié)果婚禮上边锁,老公的妹妹穿的比我還像新娘。我一直安慰自己波岛,他們只是感情好茅坛,可當(dāng)我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著则拷,像睡著了一般贡蓖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上煌茬,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天斥铺,我揣著相機(jī)與錄音,去河邊找鬼坛善。 笑死晾蜘,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的浑吟。 我是一名探鬼主播笙纤,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼组力!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起抖拴,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤燎字,失蹤者是張志新(化名)和其女友劉穎腥椒,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體候衍,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡笼蛛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蛉鹿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滨砍。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖妖异,靈堂內(nèi)的尸體忽然破棺而出惋戏,到底是詐尸還是另有隱情,我是刑警寧澤他膳,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布响逢,位于F島的核電站,受9級特大地震影響棕孙,放射性物質(zhì)發(fā)生泄漏舔亭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一蟀俊、第九天 我趴在偏房一處隱蔽的房頂上張望钦铺。 院中可真熱鬧,春花似錦肢预、人聲如沸职抡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缚甩。三九已至,卻和暖如春窑邦,著一層夾襖步出監(jiān)牢的瞬間擅威,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工冈钦, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留郊丛,地道東北人。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓瞧筛,卻偏偏與公主長得像厉熟,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子较幌,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,515評論 2 359

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

  • Jsoup官方文檔中文版 解析和遍歷一個HTML文檔 一個文檔的對象模型 文檔由多個Elements和TextNo...
    大灰狼zz閱讀 7,087評論 0 4
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5揍瑟? 答:HTML5是最新的HTML標(biāo)準(zhǔn)。 注意:講述HT...
    kismetajun閱讀 27,513評論 1 45
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理乍炉,服務(wù)發(fā)現(xiàn)绢片,斷路器滤馍,智...
    卡卡羅2017閱讀 134,702評論 18 139
  • 白羊巨無霸的好奇心,讓我對各種新鮮事物保持著強(qiáng)大的新鮮感底循,所以這些年巢株,雖然不好學(xué)習(xí),卻也一直樂此不疲的接觸各種管理...
    要減肥的胖胖魚閱讀 289評論 0 0
  • 今年6月份熙涤,第一次看到《向沒有借東西》阁苞,也是第一次聽說火星爺爺這個名字。印象非常深刻祠挫。 一個從小經(jīng)歷那么多困...
    藍(lán)瑟_2017閱讀 371評論 0 0