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();
}
}
完整代码如下:
