因为项目需求,需要车辆品牌信息和车系信息,昨天用一天时间研究了jsoup爬取网站信息。项目是用maven+spring+springmvc+mybatis写的。

  jsoup开发指南地址:http://www.open-open.com/jsoup/

  这个是需要爬取网站的地址 https://car.autohome.com.cn/zhaoche/pinpai/

  

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

  因为需要把图片保存到本地所以又添加了commons-net包

  

  1. <!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
  2. <dependency>
  3. <groupId>org.jsoup</groupId>
  4. <artifactId>jsoup</artifactId>
  5. <version>1.10.3</version>
  6. </dependency>
  7. <!-- https://mvnrepository.com/artifact/commons-net/commons-net -->
  8. <dependency>
  9. <groupId>commons-net</groupId>
  10. <artifactId>commons-net</artifactId>
  11. <version>3.3</version>
  12. </dependency>

  2.然后是爬虫代码的实现

  1. @Controller
  2. @RequestMapping("/car/")
  3. public class CarController {
  4. //图片保存路径
  5. private static final String saveImgPath="C://imgs";
  6. /**
  7. * @Title: insert 品牌名称 和图片爬取和添加
  8. * @Description:
  9. * @param @throws IOException
  10. * @return void
  11. * @throws
  12. * @date 2018年1月29日 下午4:42:57
  13. */
  14. @RequestMapping("add")
  15. public void insert() throws IOException {
  16. //定义想要爬取数据的地址
  17. String url = "https://car.autohome.com.cn/zhaoche/pinpai/";
  18. //获取网页文本
  19. Document doc = Jsoup.connect(url).get();
  20. //根据类名获取文本内容
  21. Elements elementsByClass = doc.getElementsByClass("uibox-con");
  22. //遍历类的集合
  23. for (Element element : elementsByClass) {
  24. //获取类的子标签数量
  25. int childNodeSize_1 = element.childNodeSize();
  26. //循环获取子标签内的内容
  27. for (int i = 0; i < childNodeSize_1; i++) {
  28. //获取车标图片地址
  29. String tupian = element.child(i).child(0).child(0).child(0).child(0).attr("src");
  30. //获取品牌名称
  31. String pinpai = element.child(i).child(0).child(1).text();
  32. //输出获取内容看是否正确
  33. System.out.println("车标图片地址-----------" + tupian);
  34. System.out.println("品牌-----------" + pinpai);
  35. System.out.println();
  36. //把车标图片保存到本地
  37. String tupian_1 = "http:"+tupian;
  38. //连接url
  39. URL url1 = new URL(tupian_1);
  40. URLConnection uri=url1.openConnection();
  41. //获取数据流
  42. InputStream is=uri.getInputStream();
  43. //获取后缀名
  44. String imageName = tupian.substring(tupian.lastIndexOf("/") + 1,tupian.length());
  45. //写入数据流
  46. OutputStream os = new FileOutputStream(new File(saveImgPath, imageName));
  47. byte[] buf = new byte[1024];
  48. int p=0;
  49. while((p=is.read(buf))!=-1){
  50. os.write(buf, 0, p);
  51. }
  52. /**
  53. * 因为每个品牌下有多个合资工厂
  54. * 比如一汽大众和上海大众还有进口大众
  55. * 所有需要循环获取合资工厂名称和旗下
  56. * 车系
  57. */
  58.  
  59. //获取车系数量
  60. int childNodeSize_2 = element.child(i).child(1).child(0).childNodeSize();
  61. /**
  62. * 获取标签下子标签数量
  63. * 如果等于1则没有其他合资工厂
  64. */
  65. int childNodeSize_3 = element.child(i).child(1).childNodeSize();
  66. if(childNodeSize_3==1){
  67. //循环获取车系信息
  68. for (int j = 0; j < childNodeSize_2; j++) {
  69. String chexi = element.child(i).child(1).child(0).child(j).child(0).child(0).text();
  70. System.out.println("车系-----------" + chexi);
  71. }
  72. }else{
  73. /**
  74. * 如果childNodeSize_3大于1
  75. * 则有多个合资工厂
  76. */
  77. //分别获取各个合资工厂旗下车系
  78. for (int j = 0; j < childNodeSize_3; j++) {
  79.  
  80. int childNodeSize_4 = element.child(i).child(1).child(j).childNodeSize();
  81. /**
  82. * 如果j是单数则是合资工厂名称
  83. * 否则是车系信息
  84. */
  85. int k = j%2;
  86.  
  87. if(k==0){
  88. //获取合资工厂信息
  89. String hezipinpai = element.child(i).child(1).child(j).child(0).text();
  90. System.out.println("合资企业名称-----------" + hezipinpai);
  91. }else{
  92. //int childNodeSize_5 = element.child(i).child(1).child(0).childNodeSize();
  93. //循环获取合资工厂车系信息
  94. for(int l = 0; l < childNodeSize_4; l++){
  95. String chexi = element.child(i).child(1).child(j).child(l).child(0).child(0).text();
  96. System.out.println("车系-----------" + chexi);
  97. }
  98. }
  99. }
  100.  
  101. }
  102.  
  103. System.out.println("************************");
  104. System.out.println("************************");
  105.  
  106. }
  107. }
  108. }
  109.  
  110. }

  3.运行结果

  4.

jsoup爬取图片到本地的更多相关文章

  1. Java jsoup爬取图片

    jsoup爬取百度瀑布流图片 是的,Java也可以做网络爬虫,不仅可以爬静态网页的图片,也可以爬动态网页的图片,比如采用Ajax技术进行异步加载的百度瀑布流. 以前有写过用Java进行百度图片的抓取, ...

  2. python实现scrapy爬取图片到本地时的sha1摘要算法文件名

    2017-03-29 Scrapy爬图片到本地应该会给图片自动生成sha1摘要算法文件名,我第一次用scrapy也不清楚太多,就在程序里自己写了一段实现这一功能的代码.需import hashlib ...

  3. PHP 爬取图片 保存本地

    public function getImage($url,$filename='') { if($url == ''){ return false; } if($filename == ''){ $ ...

  4. scrapy爬虫系列之三--爬取图片保存到本地

    功能点:如何爬取图片,并保存到本地 爬取网站:斗鱼主播 完整代码:https://files.cnblogs.com/files/bookwed/Douyu.zip 主要代码: douyu.py im ...

  5. 使用Scrapy爬取图片入库,并保存在本地

    使用Scrapy爬取图片入库,并保存在本地 上 篇博客已经简单的介绍了爬取数据流程,现在让我们继续学习scrapy 目标: 爬取爱卡汽车标题,价格以及图片存入数据库,并存图到本地 好了不多说,让我们实 ...

  6. python +requests 爬虫-爬取图片并进行下载到本地

    因为写12306抢票脚本需要用到爬虫技术下载验证码并进行定位点击所以这章主要讲解,爬虫,从网页上爬取图片并进行下载到本地   爬虫实现方式: 1.首先选取你需要的抓取的URL:2.将这些URL放入待抓 ...

  7. Jsoup爬取带登录验证码的网站

    今天学完爬虫之后想的爬一下我们学校的教务系统,可是发现登录的时候有验证码.因此研究了Jsoup爬取带验证码的网站: 大体的思路是:(需要注意的是__VIEWSTATE一直变化,所以我们每个页面都需要重 ...

  8. [python爬虫] 爬取图片无法打开或已损坏的简单探讨

    本文主要针对python使用urlretrieve或urlopen下载百度.搜狗.googto(谷歌镜像)等图片时,出现"无法打开图片或已损坏"的问题,作者对它进行简单的探讨.同时 ...

  9. 孤荷凌寒自学python第八十二天学习爬取图片2

    孤荷凌寒自学python第八十二天学习爬取图片2 (完整学习过程屏幕记录视频地址在文末) 今天在昨天基本尝试成功的基础上,继续完善了文字和图片的同时爬取并存放在word文档中. 一.我准备爬取一个有文 ...

随机推荐

  1. Linux : screen 工具详解

    转自:http://www.cnblogs.com/mchina/archive/2013/01/30/2880680.html [ Screen 官方站点 ] 背景 系统管理员经常需要SSH 或者t ...

  2. AutoMapper 使用总结

    初识AutoMapper 在开始本篇文章之前,先来思考一个问题:一个项目分多层架构,如显示层.业务逻辑层.服务层.数据访问层.层与层访问需要数据载体,也就是类.如果多层通用一个类,一则会暴露出每层的字 ...

  3. Java编程思想读书笔记(一)【对象导论】

    2018年1月7日15:45:58 前言 作为学习Java语言的经典之作<Java编程思想>,常常被人提起.虽然这本书出版十年有余,但是内容还是很给力的.很多人说这本书不是很适合初学者,我 ...

  4. 【转】sublime text 3 显示空格和Tab

    因为sublime text3确实太好用了所以也用它写代码了,可是在Python3第一步把preferences.sublime-setting-Default里面的"draw_white_ ...

  5. 数据对象转json与md5加密注意事项

    项目中遇到将OC数据对象类型转化字符类型,然后进行MD5加密的技术流程,在转化字符数组到字符加密过程中遇到一些问题. 问题 转化后的字符进行md5加密,出现与服务器加密结果不匹配的情况 分析 在对代码 ...

  6. 阿里mysql同步工具otter的docker镜像

    https://github.com/dearplain/otter_manager https://github.com/dearplain/otter_node 本人开发的小巧docker镜像,根 ...

  7. 【二分图】洛谷P1640连续攻击游戏

    题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性.并且每种装备 ...

  8. 云服务器 远程mysql 无法连接

    问题:mysql不管是用免安装版的,还是用直接安装的,还是用phpStudy直接发布的mysql服务.都只能用localhost登录,不能用服务器的ip进行远程访问 遇到这个问题.按照网上大家介绍的方 ...

  9. 微信小程序之获取验证码js

    在微信小程序中怎样实现获取验证码的倒计时功能捏,倒计时的原理是一样一样的,就是某些地方需要注意. 第一步:结构 <view class='get-code' wx:if="{{!isS ...

  10. takes 3 positional arguments but 4 were given错误

    之前写程序经常会碰到此类问题,确认发现并没有少参数.后来恍然大悟:函数为类下函数,定义时需要添加self参数. 但是!但是!为何Python给self赋值而你不必给self赋值? 创建了一个类MyCl ...