最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

jsoup如何爬取圖片到本地

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

因為項目需求,需要車輛品牌信息和車系信息,昨天用一天時間研究了jsoup爬取網(wǎng)站信息。項目是用maven+spring+springmvc+mybatis寫的。

jsoup開發(fā)指南地址 

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

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

因為需要把圖片保存到本地所以又添加了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.爬蟲代碼的實現(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)頁文本
    Document doc = Jsoup.connect(url).get();
    //根據(jù)類名獲取文本內(nèi)容
    Elements elementsByClass = doc.getElementsByClass("uibox-con");
    //遍歷類的集合
    for (Element element : elementsByClass) {
      //獲取類的子標(biāo)簽數(shù)量
      int childNodeSize_1 = element.childNodeSize();
      //循環(huán)獲取子標(biāo)簽內(nèi)的內(nèi)容
      for (int i = 0; i < childNodeSize_1; i++) {
        //獲取車標(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("車標(biāo)圖片地址-----------" + tupian);
        System.out.println("品牌-----------" + pinpai);
        System.out.println();
        //把車標(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());
        //寫入數(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);
        }
        /**
         * 因為每個品牌下有多個合資工廠
         * 比如一汽大眾和上海大眾還有進(jìn)口大眾
         * 所有需要循環(huán)獲取合資工廠名稱和旗下
         * 車系
         */
        
        //獲取車系數(shù)量
        int childNodeSize_2 = element.child(i).child(1).child(0).childNodeSize();
        /**
         * 獲取標(biāo)簽下子標(biāo)簽數(shù)量
         * 如果等于1則沒有其他合資工廠
         */
        int childNodeSize_3 = element.child(i).child(1).childNodeSize();
        if(childNodeSize_3==1){
          //循環(huán)獲取車系信息
          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("車系-----------" + chexi);
          }
        }else{
          /**
           * 如果childNodeSize_3大于1
           * 則有多個合資工廠
           */
          //分別獲取各個合資工廠旗下車系
          for (int j = 0; j < childNodeSize_3; j++) {
            
            int childNodeSize_4 = element.child(i).child(1).child(j).childNodeSize();
            /**
             * 如果j是單數(shù)則是合資工廠名稱
             * 否則是車系信息
             */
            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)獲取合資工廠車系信息
              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("車系-----------" + chexi);
              }
            }
          }
          
        }
        
        System.out.println("************************");
        System.out.println("************************");
        
      }
    }
  }


}


3.運行結(jié)果

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

相關(guān)文章

  • swing分割窗口控件JSplitPane使用方法詳解

    swing分割窗口控件JSplitPane使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了swing分割窗口控件JSplitPane的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • 詳解java中反射機(jī)制(含數(shù)組參數(shù))

    詳解java中反射機(jī)制(含數(shù)組參數(shù))

    這篇文章主要介紹了詳解java中反射機(jī)制(含數(shù)組參數(shù))的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • Spring中的@PropertySource注解源碼詳細(xì)解析

    Spring中的@PropertySource注解源碼詳細(xì)解析

    這篇文章主要介紹了Spring中的@PropertySource注解源碼詳細(xì)解析,@PropertySource注解,標(biāo)注在配置類@Configuration上面,下面主要分析一下@PropertySource注解的處理過程,也就是怎么把配置信息從.properies文件放到environment中的,需要的朋友可以參考下
    2024-01-01
  • Spring 注解編程模型相關(guān)知識詳解

    Spring 注解編程模型相關(guān)知識詳解

    這篇文章主要介紹了Spring 注解編程模型相關(guān)知識詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • springAOP的三種實現(xiàn)方式示例代碼

    springAOP的三種實現(xiàn)方式示例代碼

    這篇文章主要介紹了springAOP的三種實現(xiàn)方式,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • IDEA使用MyBatisCodeHelperPro來generator代碼的詳細(xì)教程

    IDEA使用MyBatisCodeHelperPro來generator代碼的詳細(xì)教程

    這篇文章主要介紹了IDEA使用MyBatisCodeHelperPro來generator代碼的詳細(xì)教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • 使用Java自定義注解實現(xiàn)一個簡單的令牌桶限流器

    使用Java自定義注解實現(xiàn)一個簡單的令牌桶限流器

    限流是在分布式系統(tǒng)中常用的一種策略,它可以有效地控制系統(tǒng)的訪問流量,保證系統(tǒng)的穩(wěn)定性和可靠性,在本文中,我將介紹如何使用Java自定義注解來實現(xiàn)一個簡單的令牌桶限流器,需要的朋友可以參考下
    2023-10-10
  • Git設(shè)置和取消代理的方法

    Git設(shè)置和取消代理的方法

    今天小編就為大家分享一篇關(guān)于Git設(shè)置和取消代理的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • mybatis-plus如何配置自定義數(shù)據(jù)類型TypeHandle

    mybatis-plus如何配置自定義數(shù)據(jù)類型TypeHandle

    這篇文章主要介紹了mybatis-plus如何配置自定義數(shù)據(jù)類型TypeHandle,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java實現(xiàn)簡易計算器(逆波蘭表達(dá)式)

    Java實現(xiàn)簡易計算器(逆波蘭表達(dá)式)

    這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)簡易計算器,逆波蘭表達(dá)式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07

最新評論

汉川市| 泽州县| 桐城市| 淮阳县| 岳普湖县| 忻城县| 泽普县| 永胜县| 类乌齐县| 尚志市| 镇巴县| 松溪县| 襄垣县| 巴楚县| 监利县| 三门县| 江北区| 富蕴县| 东兰县| 怀远县| 岢岚县| 桂平市| 宕昌县| 银川市| 望江县| 米林县| 乌苏市| 阜平县| 泰顺县| 东乌珠穆沁旗| 班玛县| 彰化市| 古浪县| 华亭县| 深圳市| 息烽县| 寿阳县| 都昌县| 罗定市| 海兴县| 台南县|