Java用Jsoup爬取王者荣耀英雄图片
Jsoup
Jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API, 可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
Jsoup官网
王者荣耀
王者荣耀是是由腾讯游戏天美工作室群开发并运行的一款运营在Android、IOS、NS平台上的MOBA类国产手游。
爬取的网站
爬取分析
引入Jsoup依赖
<dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.13.1</version> </dependency>
对网站分析
去官网看网页源代码可知,英雄列表是在<ul class="herolist clearfix"></ul>这ul标签里,因此我们需要得到ul,然后再获取li。
代码如下
进一步分析网站你会发现,li里的图片都是小图,不清晰,当点击图片时会链接到该英雄的详情页面,我们应该获取这上面的图片
代码如下,其中获取到的详情页面地址是相对地址,得进行拼接
可以先输出pickName进行验证
详情页面
对详情页面进行分析,我们可以找到大图的位置,我们要获取的是这个图片地址,获取到图片地址后,接着IO读写把这些网络图片下载到本地即可。
浏览器打开图片地址,验证没问题
分析:
先获取class为zk-con1 zk-con的div,再获取style里的地址,再对地址进行截断拼接,最后用IO读这些网络图片,然后写入本地磁盘即可,这里我存入D盘下的javaSpider文件中,每个图片的命名用该英雄名字。
可先打印attrStyle,验证获取的style地址对不对
代码如下
/** * 下载图片 * * @param path * @param pickName */ private static void getPic(String path, String pickName) throws IOException { Connection conn = Jsoup.connect(path); Document doc = conn.get(); Element elementDiv = doc.selectFirst("[class=zk-con1 zk-con]"); String attrStyle = elementDiv.attr("style"); //background:url(//game.gtimg.cn/images/yxzj/img201606/skin/hero-info/167/167-bigskin-1.jpg) center 0 //截取字符串 int start = attrStyle.indexOf("//") + 3; int end = attrStyle.lastIndexOf(""); //截取后,game.gtimg.cn/images/yxzj/img201606/skin/hero-info/167/167-bigskin-1.jpg //String substring = attrStyle.substring(start, end); URL url = new URL("https://" + attrStyle.substring(start, end)); //下载网络图片到本地 //IO 输入流 读取 BufferedInputStream in = null; BufferedOutputStream out = null; try { in = new BufferedInputStream(url.openStream()); out = new BufferedOutputStream(new FileOutputStream(new File("D:\javaSpider\" + pickName + ".jpg"))); byte[] b = new byte[1024]; int len = -1; while ((len = in.read(b, 0, 1024)) != -1) { out.write(b, 0, len); out.flush(); } } catch (Exception e) { e.printStackTrace(); } finally { in.close(); out.close(); } }
完整代码如下: