大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) 學(xué)習(xí)攻略 Java爬蟲(chóng)學(xué)習(xí):網(wǎng)絡(luò)爬蟲(chóng)

Java爬蟲(chóng)學(xué)習(xí):網(wǎng)絡(luò)爬蟲(chóng)

更新時(shí)間:2020-03-11 10:55:40 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽3018次


  Jsoup方式提取信息


  我們先來(lái)使用Jsoup的方式提取新聞信息,如果你還不知道Jsoup,請(qǐng)參考https://jsoup.org/


  先建立一個(gè)Springboot項(xiàng)目,名字就隨意啦,在pom.xml中引入Jsoup的依賴

  <dependency>

  <groupId>org.jsoup</groupId>

  <artifactId>jsoup</artifactId>

  <version>1.12.1</version>

  </dependency>

  好了,接下來(lái)我們一起分析頁(yè)面吧,想必你還沒(méi)瀏覽過(guò)吧,點(diǎn)擊這里瀏覽虎撲新聞。在列表頁(yè)中,我們利用F12審查元素查看頁(yè)面結(jié)構(gòu),經(jīng)過(guò)我們分析發(fā)現(xiàn)列表新聞在<divclass="news-list">標(biāo)簽下,每一條新聞都是一個(gè)li標(biāo)簽,分析結(jié)果如下圖所示:


Java爬蟲(chóng)學(xué)習(xí):網(wǎng)絡(luò)爬蟲(chóng)


  由于我們前面已經(jīng)知道了css選擇器,我們結(jié)合瀏覽器的Copy功能,編寫(xiě)出我們a標(biāo)簽的css選擇器代碼:div.news-list>ul>li>div.list-hd>h4>a,一切都準(zhǔn)備好了,我們一起來(lái)編寫(xiě)Jsoup方式提取信息的代碼:

  /**

  *jsoup方式獲取虎撲新聞列表頁(yè)

  *@paramurl虎撲新聞列表頁(yè)url

  */

  publicvoidjsoupList(Stringurl){

  try{

  Documentdocument=Jsoup.connect(url).get();

  //使用css選擇器提取列表新聞a標(biāo)簽

  //<ahref="https://voice.hupu.com/nba/2484553.html"target="_blank">霍華德:夏休期內(nèi)曾節(jié)食30天,這考驗(yàn)了我的身心</a>

  Elementselements=document.select("div.news-list>ul>li>div.list-hd>h4>a");

  for(Elementelement:elements){

  //System.out.println(element);

  //獲取詳情頁(yè)鏈接

  Stringd_url=element.attr("href");

  //獲取標(biāo)題

  Stringtitle=element.ownText();

  System.out.println("詳情頁(yè)鏈接:"+d_url+",詳情頁(yè)標(biāo)題:"+title);

  }

  }catch(IOExceptione){

  e.printStackTrace();

  }

  }

  使用Jsoup方式提取還是非常簡(jiǎn)單的,就5、6行代碼就完成了,關(guān)于更多Jsoup如何提取節(jié)點(diǎn)信息的方法可以參考jsoup的官網(wǎng)教程。我們編寫(xiě)main方法,來(lái)執(zhí)行jsoupList方法,看看jsoupList方法是否正確。

  publicstaticvoidmain(String[]args){

  Stringurl="https://voice.hupu.com/nba";

  CrawlerBasecrawlerBase=newCrawlerBase();

  crawlerBase.jsoupList(url);

  }

  執(zhí)行main方法,得到如下結(jié)果:


  Java爬蟲(chóng)學(xué)習(xí):網(wǎng)絡(luò)爬蟲(chóng)


  從結(jié)果中可以看出,我們已經(jīng)正確的提取到了我們想要的信息,如果你想采集詳情頁(yè)的信息,只需要編寫(xiě)一個(gè)采集詳情頁(yè)的方法,在方法中提取詳情頁(yè)相應(yīng)的節(jié)點(diǎn)信息,然后將列表頁(yè)提取的鏈接傳入提取詳情頁(yè)方法即可。


  httpclient+正則表達(dá)式


  上面我們使用了Jsoup方式正確提取了虎撲列表新聞,接下來(lái)我們使用httpclient+正則表達(dá)式的方式來(lái)提取,看看使用這種方式又會(huì)涉及到哪些問(wèn)題?httpclient+正則表達(dá)式的方式涉及的知識(shí)點(diǎn)還是蠻多的,它涉及到了正則表達(dá)式、Java正則表達(dá)式、httpclient。如果你還不知道這些知識(shí),可以點(diǎn)擊下方鏈接簡(jiǎn)單了解一下:


  正則表達(dá)式:正則表達(dá)式


  Java正則表達(dá)式:Java正則表達(dá)式


  httpclient:httpclient


  我們?cè)趐om.xml文件中,引入httpclient相關(guān)Jar包

  <dependency>

  <groupId>org.apache.httpcomponents</groupId>

  <artifactId>httpclient</artifactId>

  <version>4.5.10</version>

  </dependency>

  <dependency>

  <groupId>org.apache.httpcomponents</groupId>

  <artifactId>httpcore</artifactId>

  <version>4.4.10</version>

  </dependency>

  <dependency>

  <groupId>org.apache.httpcomponents</groupId>

  <artifactId>httpmime</artifactId>

  <version>4.5.10</version>

  </dependency>
  /**

  *httpclient+正則表達(dá)式獲取虎撲新聞列表頁(yè)

  *@paramurl虎撲新聞列表頁(yè)url

  */

  publicvoidhttpClientList(Stringurl){

  try{

  CloseableHttpClienthttpclient=HttpClients.createDefault();

  HttpGethttpGet=newHttpGet(url);

  CloseableHttpResponseresponse=httpclient.execute(httpGet);

  if(response.getStatusLine().getStatusCode()==200){

  HttpEntityentity=response.getEntity();

  Stringbody=EntityUtils.toString(entity,"utf-8");

  if(body!=null){

  /*

  *替換掉換行符、制表符、回車(chē)符,去掉這些符號(hào),正則表示寫(xiě)起來(lái)更簡(jiǎn)單一些

  *只有空格符號(hào)和其他正常字體

  */

  Patternp=Pattern.compile("\t|\r|\n");

  Matcherm=p.matcher(body);

  body=m.replaceAll("");

  /*

  *提取列表頁(yè)的正則表達(dá)式

  *去除換行符之后的li

  *<divclass="list-hd"><h4><ahref="https://voice.hupu.com/nba/2485167.html"target="_blank">與球迷親切互動(dòng)!凱爾特人官方曬球隊(duì)開(kāi)放訓(xùn)練日照片</a></h4></div>

  */

  Patternpattern=Pattern

  .compile("<divclass=\"list-hd\">\\s*<h4>\\s*<ahref=\"(.*?)\"\\s*target=\"_blank\">(.*?)</a>\\s*</h4>\\s*</div>");

  Matchermatcher=pattern.matcher(body);

  //匹配出所有符合正則表達(dá)式的數(shù)據(jù)

  while(matcher.find()){

  //Stringinfo=matcher.group(0);

  //System.out.println(info);

  //提取出鏈接和標(biāo)題

  System.out.println("詳情頁(yè)鏈接:"+matcher.group(1)+",詳情頁(yè)標(biāo)題:"+matcher.group(2));

  }

  }else{

  System.out.println("處理失敗!!!獲取正文內(nèi)容為空");

  }

  }else{

  System.out.println("處理失敗!!!返回狀態(tài)碼:"+response.getStatusLine().getStatusCode());

  }

  }catch(Exceptione){

  e.printStackTrace();

  }

  }


  從代碼的行數(shù)可以看出,比Jsoup方式要多不少,代碼雖然多,但是整體來(lái)說(shuō)比較簡(jiǎn)單,在上面方法中我做了一段特殊處理,我先替換了httpclient獲取的字符串body中的換行符、制表符、回車(chē)符,因?yàn)檫@樣處理,在編寫(xiě)正則表達(dá)式的時(shí)候能夠減少一些額外的干擾。接下來(lái)我們修改main方法,運(yùn)行httpClientList方法。

  publicstaticvoidmain(String[]args){

  Stringurl="https://voice.hupu.com/nba";

  CrawlerBasecrawlerBase=newCrawlerBase();

  //crawlerBase.jsoupList(url);

  crawlerBase.httpClientList(url);

  }

Java爬蟲(chóng)學(xué)習(xí):網(wǎng)絡(luò)爬蟲(chóng)


  使用httpclient+正則表達(dá)式的方式同樣正確的獲取到了列表新聞的標(biāo)題和詳情頁(yè)鏈接。到此Java爬蟲(chóng)系列博文第一篇就寫(xiě)完了,這一篇主要是Java網(wǎng)絡(luò)爬蟲(chóng)的入門(mén),我們使用了jsoup和httpclient+正則的方式提取了虎撲列表新聞的新聞標(biāo)題和詳情頁(yè)鏈接。當(dāng)然這里還有很多沒(méi)有完成,比如采集詳情頁(yè)信息存入數(shù)據(jù)庫(kù)等。


    以上就是動(dòng)力節(jié)點(diǎn)Java培訓(xùn)機(jī)構(gòu)小編介紹的“Java爬蟲(chóng)學(xué)習(xí):網(wǎng)絡(luò)爬蟲(chóng)”的內(nèi)容,希望對(duì)大家有幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。


提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 日本一区二区三区四区 | 日本国产一区二区三区 | 国产香蕉尹人综合在线 | 久久99热精品免费观看无卡顿 | 中文字幕一区在线播放 | 亚洲国产高清精品线久久 | 欧洲色片| 996re免费热在线视频手机 | 四虎影视院 | 伊人色综合久久天天网 | 国产精品亚洲国产 | 99pao在线视频精品免费 | 国产一级久久免费特黄 | 欧洲性大片xxxxx久久久 | 七七久久综合 | 亚洲成人免费网站 | 日本精品网站 | 99久久99久久久精品齐齐鬼色 | 午夜色站 | 理论毛片 | 国产大片在线播放 | 亚洲免费精品视频 | 91精品91久久久 | 久久频这里精品香蕉久久 | www.男人天堂.com | 亚洲综合狠狠 | 欧美日韩你懂的 | 欧美成人免费毛片 | 久久天天丁香婷婷中文字幕 | 欧美亚洲动漫 | 久久久久久亚洲精品影院 | 亚洲欧美一区二区三区九九九 | 欧美精品一区二区三区在线 | 成人精品区 | 亚洲在线视频免费 | 天天成人综合网 | 欧美va亚洲va在线观看蝴蝶网 | 久久精品国产一区二区 | 99久久国产综合精麻豆 | 国产成人18黄网站麻豆 | 在线精品视频成人网 |