Jsoup是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。

jsoup 的主要功能如下:

1. 从一个 URL,文件或字符串中解析 HTML;

2. 使用 DOM 或 CSS 选择器来查找、取出数据;

3. 可操作 HTML 元素、属性、文本;

jsoup 是基于 MIT 协议发布的,可放心使用于商业项目。

jsoup 可以从包括字符串、URL 地址以及本地文件来加载 HTML 文档,并生成 Document 对象实例。

Document

每个载入浏览器的 HTML 文档都会成为 Document 对象。

Document 对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问。

提示:Document 对象是 Window 对象的一部分,可通过 window.document 属性对其进行访问。

Element

在 HTML DOM 中,Element 对象表示 HTML 元素。

文本节点Element 对象可以拥有类型为元素节点、、注释节点的子节点。

NodeList 对象表示节点列表,比如 HTML 元素的子节点集合。

元素也可以拥有属性。属性是属性节点。

Node

在 HTML DOM (文档对象模型)中,每个部分都是节点:

文档本身是文档节点

所有 HTML 元素是元素节点

所有 HTML 属性是属性节点

HTML 元素内的文本是文本节点

注释是注释节点

代码:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/**** 苏宁易购 图片爬虫** */
public class GetPic {/***  获取所有的图片列表页面*  url:苏宁易购的首页网址*  return map<图片的种类,图片下载的父链接>** */public static Map<String,String> getAllPicPage(String url){Map<String,String> map=new HashMap<>();try {Document document= Jsoup.connect(url).userAgent("Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0").header("Host","res.suning.cn").header("Accept-Encoding","gzip, deflate, br").get();Elements elements=  document.select(".hcList-wrapper").select(".hcList").select("ul").select("li").select("a");for(Element element:elements){String subUrl=element.attr("href");System.out.println("href:"+subUrl);System.out.println(element.text());map.put(element.text(),subUrl);}} catch (IOException e) {e.printStackTrace();}return map;}/***  获取所有的图片列表页面*  title :图片所属的种类*  url:图片下载的路径*  return list<图片种类-图片下载的路径>* */public static List<String> getAllPicPageFromOnePage(String title,String url){List<String> list=new ArrayList<>();try {Document document= Jsoup.connect(url).userAgent("Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0").header("Accept-Encoding","gzip, deflate, br").header("Host","res.suning.cn").get();Elements elements= document.select(".good-show").select("div").select("a").select(".pic-show").select("img");for(Element element:elements){String src=title+"-"+element.attr("lazy-src");System.out.println(src);list.add(src);}} catch (IOException e) {e.printStackTrace();}return list;}/*** 下载图片指定的title目录上* title :图片所属的种类* fileName:图片名* src:图片的下载路径** */public static void downloadPic(String title,String fileName,String src){try {URL url = new URL(src);BufferedInputStream bis = new BufferedInputStream(url.openConnection().getInputStream());byte myArray[] = new byte[1024*1024];int len = 0;File file=new File("E://images/" +title+"/");if(!file.exists()){file.mkdirs();}BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("E://images/" +title+"/"+ fileName));while((len = bis.read(myArray)) != -1){bos.write(myArray, 0, len);}bos.flush();bos.close();bis.close();System.out.println("图片:" + fileName +" ------>下载成功!");} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}/**** 得到标题* */public static String getTitleFromUrl(String url){int firstIndex= url.indexOf("-");String title=url.substring(0,firstIndex);return title;}/****得到图片的下载路径* */public static String getSrcFromUrl(String url){int firstIndex= url.indexOf("-");String src="http:"+url.substring(firstIndex+1);return src;}/*** 将图片下载地址进行切割,得到图片名*** */public static String getNameFromUrl(String url){//找到最后一个 "/" 的位置int beginIndex = url.lastIndexOf("/");//截取 "/" 后面的内容String name = url.substring(beginIndex + 1);//处理文件名int index=  name.lastIndexOf(".");String subName=  name.substring(index);if(subName.contains("jpg") && subName.length()>3){subName="jpg";name=name.substring(0,index+1).concat(subName);}if(subName.contains("png") && subName.length()>3){subName="png";name=name.substring(0,index+1).concat(subName);}return name;}public static void downloadAll(){Map<String,String> map= getAllPicPage("https://www.suning.com");for(Map.Entry<String,String> entry:map.entrySet()){List<String> list= getAllPicPageFromOnePage(entry.getKey(),entry.getValue());for(String url:list){String title=getTitleFromUrl(url);String fileName=getNameFromUrl(url);String src=getSrcFromUrl(url);downloadPic(title,fileName,src);}}}public static void main(String[] args){downloadAll();}}

这是本人初学Jsoup 写的代码,如果有什么不足的地方,可以评论交流

Jsoup爬虫案例-苏宁易购图片下载相关推荐

  1. Python—实训day4—爬虫案例3:贴吧图片下载

    6 xpath 首先需要安装Google的Chrome浏览器 6.1 安装xpath插件 把 xpath_helper_2_0_2.crx 修改后缀名为 xpath_helper_2_0_2.rar. ...

  2. 苏宁易购网址爬虫爬取商品信息及图片

    利用scrapy来爬取苏宁官网上任何商品的信息,主要的信息有商品标题.商品现价.商品原价.商铺名称,以及用scrapy的ImagesPipeline来下载商品图片. 部分主函数代码如下: # -*- ...

  3. 分布式爬虫系统设计、实现与实战:爬取京东、苏宁易购全网手机商品数据+MySQL、HBase存储...

    http://blog.51cto.com/xpleaf/2093952 1 概述 在不用爬虫框架的情况,经过多方学习,尝试实现了一个分布式爬虫系统,并且可以将数据保存到不同地方,类似MySQL.HB ...

  4. 分布式爬虫系统设计、实现与实战:爬取京东、苏宁易购全网手机商品数据+MySQL、HBase存储

    1 概述 在不用爬虫框架的情况,经过多方学习,尝试实现了一个分布式爬虫系统,并且可以将数据保存到不同地方,类似MySQL.HBase等. 基于面向接口的编码思想来开发,因此这个系统具有一定的扩展性,有 ...

  5. 爬虫项目十:Python苏宁易购商品数据、评论数据爬取

    文章目录 前言 一.商品数据 1.分析url 2.解析数据 3.实现翻页 二.评论数据 前言 利用Python对苏宁易购商品数据评价数据实现爬取 提示:以下是本篇文章正文内容,下面案例可供参考 一.商 ...

  6. 轻松复制苏宁易购多个商品图片分类保存

    苏宁易购是领先的综合网上购物商城,这里商品种类多样,一站式购物,所有很多人都会将喜欢的商品图片保存下来,但是确不知道如何快速复制保存,下面一起用下图高手来试试吧. 先来看看用下图高手同时复制保存到的多 ...

  7. 获取苏宁易购商品的评论图片

    苏宁易购评论图怎么保存?可以在电脑上操作吗?下图高手可以支持吗?小编的回答当然是可以的,下面一起来试试. 进入苏宁易购,输入关键词,挑选商品 喜欢哪个商品进入页面,选中并复制上方的链接 把复制好的链接 ...

  8. python scrapy 框架的简单使用爬虫苏宁易购图书信息

    python scrapy 框架的简单使用&&爬虫苏宁易购图书信息 前言 第一步: 分析网页 1.1 找到要爬取的数据位置 分类信息 图书信息 价格信息 1.2 分析如何获取数据 正则 ...

  9. Python爬虫20-Scrapy爬取苏宁易购图书

    Scrapy爬取苏宁易购图书 1.创建一个scrapy项目 scrapy startproject book 2.生成一个爬虫文件 scrapy genspider su book.suning.co ...

最新文章

  1. 使用Git将最新提交移至新分支
  2. spring注解开发:容器中注册组件方式
  3. 技术动态 | 知识图谱从哪里来:实体关系抽取的现状与未来
  4. 实例变量 成员变量 java 1615135036
  5. 一般左边后台点击收缩展开的效果
  6. UVa11542 - Square(gauss)
  7. C语言学习之 数组,指针,字符串. (一)
  8. 自定义微信小程序导航(兼容各种手机)
  9. 获取html上元素的真正坐标
  10. Go语言编程(旧读书笔记)
  11. 炫酷流光个人主页源码分享及在线部署教程
  12. 把EXCEL表格导入到MYSQL中_将EXCEL表格中的数据导入mysql数据库表中(两种方法)...
  13. 算法习题---5-3卡牌游戏(UVa10935)
  14. 帆软报表决策系统跨域登录
  15. uniapp微信小程序实现连接低功耗蓝牙打印功能
  16. 想在美国找CS软件工作
  17. android电池电量更新,android 电池(三):android电池系统
  18. 计算机组成的分析指令的op,计算机组成原理-第12讲(第4章).ppt
  19. 1.5小时,一键部署Oracle 11GR2 RAC 集群
  20. RK3568 Android12 MAC地址生成简析

热门文章

  1. 【Android】快速填满手机存储空间的方法
  2. 变幻无常的七月   灵宝西站派出所丁甲平
  3. python中min(x)是什么意思,Python的min/max的C等价性是什么
  4. AIS Camera流程-opencamera
  5. 巧解图像处理经典难题之图像配准
  6. EduCoder-程序设计技术R(第三部分选择结构程序设计进阶)- 第1关:快递费用计算
  7. 华科计算机考研复试真题,华科计算机考研复试机试题【含参考代码】
  8. Missing-Tag Detection With Unknown Tags理解+翻译+引文简介
  9. Android开发,使用Log打印日志,打印相同内容在Logcat中只能连续显示两次(遍历打印List中的内容,打印结果条数比List的size小)。
  10. 弧齿锥齿轮零件图_转载:格利森弧齿锥齿轮副的安装与调整