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

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java爬蟲學習:網絡爬蟲

Java爬蟲學習:網絡爬蟲

更新時間:2020-03-11 10:55:40 來源:動力節點 瀏覽2827次


  Jsoup方式提取信息


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


  先建立一個Springboot項目,名字就隨意啦,在pom.xml中引入Jsoup的依賴

  <dependency>

  <groupId>org.jsoup</groupId>

  <artifactId>jsoup</artifactId>

  <version>1.12.1</version>

  </dependency>

  好了,接下來我們一起分析頁面吧,想必你還沒瀏覽過吧,點擊這里瀏覽虎撲新聞。在列表頁中,我們利用F12審查元素查看頁面結構,經過我們分析發現列表新聞在<divclass="news-list">標簽下,每一條新聞都是一個li標簽,分析結果如下圖所示:


Java爬蟲學習:網絡爬蟲


  由于我們前面已經知道了css選擇器,我們結合瀏覽器的Copy功能,編寫出我們a標簽的css選擇器代碼:div.news-list>ul>li>div.list-hd>h4>a,一切都準備好了,我們一起來編寫Jsoup方式提取信息的代碼:

  /**

  *jsoup方式獲取虎撲新聞列表頁

  *@paramurl虎撲新聞列表頁url

  */

  publicvoidjsoupList(Stringurl){

  try{

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

  //使用css選擇器提取列表新聞a標簽

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

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

  for(Elementelement:elements){

  //System.out.println(element);

  //獲取詳情頁鏈接

  Stringd_url=element.attr("href");

  //獲取標題

  Stringtitle=element.ownText();

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

  }

  }catch(IOExceptione){

  e.printStackTrace();

  }

  }

  使用Jsoup方式提取還是非常簡單的,就5、6行代碼就完成了,關于更多Jsoup如何提取節點信息的方法可以參考jsoup的官網教程。我們編寫main方法,來執行jsoupList方法,看看jsoupList方法是否正確。

  publicstaticvoidmain(String[]args){

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

  CrawlerBasecrawlerBase=newCrawlerBase();

  crawlerBase.jsoupList(url);

  }

  執行main方法,得到如下結果:


  Java爬蟲學習:網絡爬蟲


  從結果中可以看出,我們已經正確的提取到了我們想要的信息,如果你想采集詳情頁的信息,只需要編寫一個采集詳情頁的方法,在方法中提取詳情頁相應的節點信息,然后將列表頁提取的鏈接傳入提取詳情頁方法即可。


  httpclient+正則表達式


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


  正則表達式:正則表達式


  Java正則表達式:Java正則表達式


  httpclient:httpclient


  我們在pom.xml文件中,引入httpclient相關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+正則表達式獲取虎撲新聞列表頁

  *@paramurl虎撲新聞列表頁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){

  /*

  *替換掉換行符、制表符、回車符,去掉這些符號,正則表示寫起來更簡單一些

  *只有空格符號和其他正常字體

  */

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

  Matcherm=p.matcher(body);

  body=m.replaceAll("");

  /*

  *提取列表頁的正則表達式

  *去除換行符之后的li

  *<divclass="list-hd"><h4><ahref="https://voice.hupu.com/nba/2485167.html"target="_blank">與球迷親切互動!凱爾特人官方曬球隊開放訓練日照片</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);

  //匹配出所有符合正則表達式的數據

  while(matcher.find()){

  //Stringinfo=matcher.group(0);

  //System.out.println(info);

  //提取出鏈接和標題

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

  }

  }else{

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

  }

  }else{

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

  }

  }catch(Exceptione){

  e.printStackTrace();

  }

  }


  從代碼的行數可以看出,比Jsoup方式要多不少,代碼雖然多,但是整體來說比較簡單,在上面方法中我做了一段特殊處理,我先替換了httpclient獲取的字符串body中的換行符、制表符、回車符,因為這樣處理,在編寫正則表達式的時候能夠減少一些額外的干擾。接下來我們修改main方法,運行httpClientList方法。

  publicstaticvoidmain(String[]args){

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

  CrawlerBasecrawlerBase=newCrawlerBase();

  //crawlerBase.jsoupList(url);

  crawlerBase.httpClientList(url);

  }

Java爬蟲學習:網絡爬蟲


  使用httpclient+正則表達式的方式同樣正確的獲取到了列表新聞的標題和詳情頁鏈接。到此Java爬蟲系列博文第一篇就寫完了,這一篇主要是Java網絡爬蟲的入門,我們使用了jsoup和httpclient+正則的方式提取了虎撲列表新聞的新聞標題和詳情頁鏈接。當然這里還有很多沒有完成,比如采集詳情頁信息存入數據庫等。


    以上就是動力節點Java培訓機構小編介紹的“Java爬蟲學習:網絡爬蟲”的內容,希望對大家有幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。


提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 精品久久久久中文字幕日本 | 神马九九| 国产精品成人在线播放 | 四虎影院永久网址 | 999精品视频在线 | 久久五月天婷婷 | 欧美亚洲国产视频 | 富二代啪啪精品网站 | 五月色婷婷琪琪综合伊人 | 国产女人嗷嗷叫 | 欧美一级视频在线观看 | 狠狠色噜噜狠狠狠狠色吗综合 | 一级毛片毛片毛片毛毛片 | 九九影视理论片在线播放 | 欧美另类成人 | 久色免费视频 | 亚洲图片另类图片 | 91亚洲国产在人线播放午夜 | 成人欧美精品大91在线 | 亚洲一级毛片在线观 | 亚洲欧美国产一区二区三区 | 色综合久久中文色婷婷 | 曰批免费视频播放在线看片二 | 第一福利在线观看 | 亚洲国产最新 | 久草.com| 婷婷综合另类小说色区 | 中文字幕天天躁夜夜狠狠综合 | 视频一区国产 | 亚州国产 | 日韩精品一区二区三区中文字幕 | 久久国产视频网站 | 国产不卡影院 | 99视频在线观看视频一区 | 国人精品视频在线观看 | 欧美日本日韩 | 毛片大全免费看 | 奇米狠狠操 | 毛片永久新网址首页 | 五月天激情在线 | 日韩欧美三区 |