Maison > interface Web > js tutoriel > le corps du texte

Comment jsoup enregistre-t-il localement les images des sites Web explorés ?

php中世界最好的语言
Libérer: 2018-04-13 09:50:51
original
2361 Les gens l'ont consulté

Cette fois, je vais vous montrer comment jsoup enregistre les images des sites Web explorés au niveau local. Quelles sont les précautions pour que jsoup enregistre les images du site Web exploré au niveau local. est un cas pratique, jetons un coup d'oeil.

En raison des exigences du projet , des informations sur la marque du véhicule et des informations sur le modèle de voiture sont nécessaires Hier, j'ai passé une journée à étudier les informations du site Web d'exploration de jsoup. Le projet est écrit en utilisant maven+spring+springmvc+mybatis.

Adresse du guide de développement jsoup

C'est l'adresse du site Web qui doit être exploré https://car.autohome.com.cn/zhaoche/pinpai/

1. Ajoutez d'abord les dépendances

dans pom.xml Parce que je dois enregistrer l'image localement, j'ai ajouté le package 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>
Copier après la connexion

2. Implémentation du code du robot

@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 {
    //定义想要爬取数据的地址
    String url = "https://car.autohome.com.cn/zhaoche/pinpai/";
    //获取网页文本
    Document doc = Jsoup.connect(url).get();
    //根据类名获取文本内容
    Elements elementsByClass = doc.getElementsByClass("uibox-con");
    //遍历类的集合
    for (Element element : elementsByClass) {
      //获取类的子标签数量
      int childNodeSize_1 = element.childNodeSize();
      //循环获取子标签内的内容
      for (int i = 0; i < childNodeSize_1; i++) {
        //获取车标图片地址
        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();
        //输出获取内容看是否正确
        System.out.println("车标图片地址-----------" + tupian);
        System.out.println("品牌-----------" + pinpai);
        System.out.println();
        //把车标图片保存到本地
        String tupian_1 = "http:"+tupian;
        //连接url
        URL url1 = new URL(tupian_1);
        URLConnection uri=url1.openConnection();
        //获取数据流
        InputStream is=uri.getInputStream();
        //获取后缀名
        String imageName = tupian.substring(tupian.lastIndexOf("/") + 1,tupian.length());
        //写入数据流
        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);
        }
        /**
         * 因为每个品牌下有多个合资工厂
         * 比如一汽大众和上海大众还有进口大众
         * 所有需要循环获取合资工厂名称和旗下
         * 车系
         */
        
        //获取车系数量
        int childNodeSize_2 = element.child(i).child(1).child(0).childNodeSize();
        /**
         * 获取标签下子标签数量
         * 如果等于1则没有其他合资工厂
         */
        int childNodeSize_3 = element.child(i).child(1).childNodeSize();
        if(childNodeSize_3==1){
          //循环获取车系信息
          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是单数则是合资工厂名称
             * 否则是车系信息
             */
            int k = j%2;
            
            if(k==0){
              //获取合资工厂信息
              String hezipinpai = element.child(i).child(1).child(j).child(0).text();
              System.out.println("合资企业名称-----------" + hezipinpai);
            }else{
              //int childNodeSize_5 = element.child(i).child(1).child(0).childNodeSize();
              //循环获取合资工厂车系信息
              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("************************");
        
      }
    }
  }
}
Copier après la connexion

Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de PHP !

Lecture recommandée :

Achèvement de l'adresse e-mail de la zone de texte de l'invite JS

Traitement de l'utilisation et de la compatibilité de getBoundingClientRect

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal