欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

jsoup如何爬取圖片到本地

 更新時(shí)間:2018年01月30日 14:05:44   作者:殤丨恨  
這篇文章主要為大家詳細(xì)介紹了jsoup如何爬取圖片到本地,jsoup爬取網(wǎng)站信息,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

因?yàn)轫?xiàng)目需求,需要車(chē)輛品牌信息和車(chē)系信息,昨天用一天時(shí)間研究了jsoup爬取網(wǎng)站信息。項(xiàng)目是用maven+spring+springmvc+mybatis寫(xiě)的。

jsoup開(kāi)發(fā)指南地址 

這個(gè)是需要爬取網(wǎng)站的地址 https://car.autohome.com.cn/zhaoche/pinpai/

1.首先在pom.xml中添加依賴

因?yàn)樾枰褕D片保存到本地所以又添加了commons-net包

<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
    <dependency>
      <groupId>org.jsoup</groupId>
      <artifactId>jsoup</artifactId>
      <version>1.10.3</version>
    </dependency>
<!-- https://mvnrepository.com/artifact/commons-net/commons-net -->
    <dependency>
      <groupId>commons-net</groupId>
      <artifactId>commons-net</artifactId>
      <version>3.3</version>
    </dependency>

2.爬蟲(chóng)代碼的實(shí)現(xiàn)

@Controller
@RequestMapping("/car/")
public class CarController {
  //圖片保存路徑
  private static final String saveImgPath="C://imgs";
  /**
  * @Title: insert 品牌名稱 和圖片爬取和添加
  * @Description: 
  * @param @throws IOException  
  * @return void  
  * @throws
  * @date 2018年1月29日 下午4:42:57
  */ 
  @RequestMapping("add")
  public void insert() throws IOException {
    //定義想要爬取數(shù)據(jù)的地址
    String url = "https://car.autohome.com.cn/zhaoche/pinpai/";
    //獲取網(wǎng)頁(yè)文本
    Document doc = Jsoup.connect(url).get();
    //根據(jù)類(lèi)名獲取文本內(nèi)容
    Elements elementsByClass = doc.getElementsByClass("uibox-con");
    //遍歷類(lèi)的集合
    for (Element element : elementsByClass) {
      //獲取類(lèi)的子標(biāo)簽數(shù)量
      int childNodeSize_1 = element.childNodeSize();
      //循環(huán)獲取子標(biāo)簽內(nèi)的內(nèi)容
      for (int i = 0; i < childNodeSize_1; i++) {
        //獲取車(chē)標(biāo)圖片地址
        String tupian = element.child(i).child(0).child(0).child(0).child(0).attr("src");
        //獲取品牌名稱
        String pinpai = element.child(i).child(0).child(1).text();
        //輸出獲取內(nèi)容看是否正確
        System.out.println("車(chē)標(biāo)圖片地址-----------" + tupian);
        System.out.println("品牌-----------" + pinpai);
        System.out.println();
        //把車(chē)標(biāo)圖片保存到本地
        String tupian_1 = "http:"+tupian;
        //連接url
        URL url1 = new URL(tupian_1);
        URLConnection uri=url1.openConnection();
        //獲取數(shù)據(jù)流
        InputStream is=uri.getInputStream();
        //獲取后綴名
        String imageName = tupian.substring(tupian.lastIndexOf("/") + 1,tupian.length());
        //寫(xiě)入數(shù)據(jù)流
        OutputStream os = new FileOutputStream(new File(saveImgPath, imageName));
        byte[] buf = new byte[1024];
        int p=0;
        while((p=is.read(buf))!=-1){
          os.write(buf, 0, p);
        }
        /**
         * 因?yàn)槊總€(gè)品牌下有多個(gè)合資工廠
         * 比如一汽大眾和上海大眾還有進(jìn)口大眾
         * 所有需要循環(huán)獲取合資工廠名稱和旗下
         * 車(chē)系
         */
        
        //獲取車(chē)系數(shù)量
        int childNodeSize_2 = element.child(i).child(1).child(0).childNodeSize();
        /**
         * 獲取標(biāo)簽下子標(biāo)簽數(shù)量
         * 如果等于1則沒(méi)有其他合資工廠
         */
        int childNodeSize_3 = element.child(i).child(1).childNodeSize();
        if(childNodeSize_3==1){
          //循環(huán)獲取車(chē)系信息
          for (int j = 0; j < childNodeSize_2; j++) {
            String chexi = element.child(i).child(1).child(0).child(j).child(0).child(0).text();
            System.out.println("車(chē)系-----------" + chexi);
          }
        }else{
          /**
           * 如果childNodeSize_3大于1
           * 則有多個(gè)合資工廠
           */
          //分別獲取各個(gè)合資工廠旗下車(chē)系
          for (int j = 0; j < childNodeSize_3; j++) {
            
            int childNodeSize_4 = element.child(i).child(1).child(j).childNodeSize();
            /**
             * 如果j是單數(shù)則是合資工廠名稱
             * 否則是車(chē)系信息
             */
            int k = j%2;
            
            if(k==0){
              //獲取合資工廠信息
              String hezipinpai = element.child(i).child(1).child(j).child(0).text();
              System.out.println("合資企業(yè)名稱-----------" + hezipinpai);
            }else{
              //int childNodeSize_5 = element.child(i).child(1).child(0).childNodeSize();
              //循環(huán)獲取合資工廠車(chē)系信息
              for(int l = 0; l < childNodeSize_4; l++){
                String chexi = element.child(i).child(1).child(j).child(l).child(0).child(0).text();
                System.out.println("車(chē)系-----------" + chexi);
              }
            }
          }
          
        }
        
        System.out.println("************************");
        System.out.println("************************");
        
      }
    }
  }


}


3.運(yùn)行結(jié)果

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • java實(shí)現(xiàn)雷霆戰(zhàn)機(jī)

    java實(shí)現(xiàn)雷霆戰(zhàn)機(jī)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)雷霆戰(zhàn)機(jī),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 聊聊Object類(lèi)中的wait()和notify()方法

    聊聊Object類(lèi)中的wait()和notify()方法

    這篇文章主要介紹了Object類(lèi)中的wait()和notify()方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java語(yǔ)言中finally是否一定會(huì)執(zhí)行你知道嗎

    Java語(yǔ)言中finally是否一定會(huì)執(zhí)行你知道嗎

    這篇文章主要為大家詳細(xì)介紹了Java finally是否一定會(huì)執(zhí)行,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • Java顯式鎖詳情

    Java顯式鎖詳情

    這篇文章主要詳細(xì)的介紹了shenJava顯式鎖常用的api及標(biāo)準(zhǔn)用法,感興趣的朋友,需要的朋友可以參考下面文章里的內(nèi)容
    2021-09-09
  • Java SpringMVC 集成靜態(tài)資源的方式你了解嗎

    Java SpringMVC 集成靜態(tài)資源的方式你了解嗎

    本篇文章主要介紹了SpringMVC集成靜態(tài)資源的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2021-10-10
  • Java中兩個(gè)List之間的比較方法(差集、交集和并集)

    Java中兩個(gè)List之間的比較方法(差集、交集和并集)

    在業(yè)務(wù)的開(kāi)發(fā)過(guò)程中會(huì)經(jīng)常用到兩個(gè)List集合相互取值的情況,下面這篇文章主要給大家介紹了關(guān)于Java中兩個(gè)List之間的比較方法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • Eclipse Web項(xiàng)目打成war包的方法圖解

    Eclipse Web項(xiàng)目打成war包的方法圖解

    當(dāng)Tomcat啟動(dòng)后該壓縮文件自動(dòng)解壓縮,war包方便了web工程的發(fā)布,那么Eclipse中如何將Web項(xiàng)目打成war包呢?下面小編通過(guò)圖文并茂的方式給大家講解下Eclipse Web項(xiàng)目打成war包的方法,一起看看吧
    2016-08-08
  • Java數(shù)據(jù)結(jié)構(gòu)超詳細(xì)分析二叉搜索樹(shù)

    Java數(shù)據(jù)結(jié)構(gòu)超詳細(xì)分析二叉搜索樹(shù)

    二叉搜索樹(shù)是以一棵二叉樹(shù)來(lái)組織的。每個(gè)節(jié)點(diǎn)是一個(gè)對(duì)象,包含的屬性有l(wèi)eft,right,p和key,其中,left指向該節(jié)點(diǎn)的左孩子,right指向該節(jié)點(diǎn)的右孩子,p指向該節(jié)點(diǎn)的父節(jié)點(diǎn),key是它的值
    2022-03-03
  • 淺談Java抽象類(lèi)和接口的個(gè)人理解

    淺談Java抽象類(lèi)和接口的個(gè)人理解

    這篇文章主要介紹了淺談Java抽象類(lèi)和接口的個(gè)人理解,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • SPFA 算法實(shí)例講解

    SPFA 算法實(shí)例講解

    下面小編就為大家?guī)?lái)一篇SPFA 算法實(shí)例講解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07

最新評(píng)論