Jsoup爬虫工具实现背景图片爬取
soup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
复制代码之前准备工作
首先要将需要的jar包复制到WEB-INF>>lib下面
需要下载的Jsoup.jar包以及其使用的具体操作文档下载地址 [点击下载]
代码块
亲测:1366x768大小的可以下载三千多张壁纸,具体需要下载多大的,提供了选择 自己选择。具体
package com.test.test;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.UUID;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class Frametest {
public static void main(String[] args) throws IOException {
Document firstPage =Jsoup.connect("http://desk.zol.com.cn").get();
Elements fenleiUrl=firstPage.select("div.wrapper>div.main>dl.first>dd.brand-sel-box>a");
//System.out.println(fenleiUrl);
for(int i=1;i<fenleiUrl.size();i++){
String fenleiUrlS="http://desk.zol.com.cn"+fenleiUrl.get(i).attr("href");
Document fenleiPage =Jsoup.connect(fenleiUrlS).get();
Elements fel=fenleiPage.select("ul.pic-list2>li.photo-list-padding>a");//每个分类对应的标签
System.err.println(fenleiUrlS);
//System.out.println(fel);
for(int j=0;j<fel.size();j++){
String fenleihou="http://desk.zol.com.cn"+fel.get(j).attr("href");
System.out.println(fenleihou);
Document doc=Jsoup.connect(fenleihou).get();
Elements a=doc.select("div.wrapper>div.photo-set-list>div.photo-list-inner>div.photo-list-box>ul>li>a[href]");
for(int k=0;k<a.size();k++){
String aUrl=a.get(k).attr("href");
//System.out.println(aUrl);
Document doc2=Jsoup.connect("http://desk.zol.com.cn"+aUrl).get();
try {
Element imgUrl=doc2.getElementById("1366x768");//自行选择壁纸大小 :1440x900 1366x768 1280x1024 1280x800 1024x768
String imgUrlDown=imgUrl.attr("href");
Document doc3=Jsoup.connect("http://desk.zol.com.cn"+imgUrlDown).get();
String imgLastUrl=doc3.select("img").get(0).attr("src");
System.err.println(imgLastUrl);
//根据String形式创建一个URL对象,
URL url = new URL(imgLastUrl);
//实列一个URLconnection对象,用来读取和写入此 URL 引用的资源
URLConnection con = url.openConnection();
//获取一个输入流
InputStream is = con.getInputStream();
//实列一个输出对象
String filename="f:/img/"+UUID.randomUUID().toString()+".jpg";//图片保存的路径以及图片名字,名字及用UUID生成
FileOutputStream fos = new FileOutputStream(filename);
//一个byte[]数组,一次读取多个字节
byte[] bt = new byte[200];
//用来接收每次读取的字节个数
int b = 0;
//循环判断,如果读取的个数b为空了,则is.read()方法返回-1,具体请参考InputStream的read();
while ((b = is.read(bt)) != -1) {
//将对象写入到对应的文件中
fos.write(bt, 0, b);
}
//刷新流
fos.flush();
//关闭流
fos.close();
is.close();
} catch (Exception e) {
System.err.println("图片路径不可以");
}
}
}
}
}
}