java中怎么加载百度网页图片,Java实现爬取百度图片的方法分析,java实现爬百度图片...

本文详细介绍了如何使用Java的Jsoup库来爬取百度图片。首先,通过Jsoup连接并获取网页内容,然后利用正则表达式解析出图片URL,最后通过IO流将图片下载到本地。主要涉及的关键技术包括Jsoup的HTML解析、HTTP连接设置、正则表达式匹配以及文件I/O操作。此外,还提供了处理网络异常和默认图片的机制。
摘要由CSDN通过智能技术生成

Java实现爬取百度图片的方法分析,java实现爬百度图片

本文实例讲述了Java实现爬取百度图片的方法。分享给大家供大家参考,具体如下:

在以往用java来处理解析HTML文档或者片段时,我们通常会采用htmlparser(http://htmlparser.sourceforge.net/)这个开源类库。现在我们有了JSOUP,以后的处理HTML的内容只需要使用JSOUP就已经足够了,JSOUP有更快的更新,更方便的API等。

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

jsoup的主要功能如下:

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

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

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

jsoup是基于MIT协议发布的,可放心使用于商业项目。官方网站:http://jsoup.org/

步骤大致可以分为三个模块:一是获取网页的资源,二是解析获取的资源,取出我们想要的图片URL地址,三是通过java的io存储在本地文件中。

获取网页资源的核心模块就是通过Jsoup去获取网页的内容,具体核心代码如下:

private static List findImageNoURl(String hotelId, String url, int timeOut) {

List result = new ArrayList();

Document document = null;

try {

document = Jsoup.connect(url).data("query", "Java")//请求参数

.userAgent("Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)")//设置urer-agent get();

.timeout(timeOut)

.get();

String xmlSource = document.toString();

result = dealResult(xmlSource, hotelId);

} catch (Exception e) {

String defaultURL = "http://qnimg.zowoyoo.com/img/15463/1509533934407.jpg";

result = dealResult(defaultURL,hotelId);

}

return result;

}

其中URL地址是百度图片搜索的地址,具体调用代码如下:

public static List findImage(String hotelName, String hotelId, int page) {

int number=5;

String url = "http://image.baidu.com/search/avatarjson?tn=resultjsonavatarnew&ie=utf-8&word=" + hotelName + "&cg=star&pn=" + page * 30 + "&rn="+number+"&itg=0&z=0&fr=&width=&height=&lm=-1&ic=0&s=0&st=-1&gsm=" + Integer.toHexString(page * 30);

int timeOut = 5000;

return findImageNoURl(hotelId, url, timeOut);

}

这里需要注意的是:word是我们要搜索的关键字,pn是显示的页码,rn是一页显示多少个数据。

解析网页的资源,然后封装起来。核心代码如下:

private static List dealResult(String xmlSource, String hotelId) {

List result = new ArrayList();

xmlSource = StringEscapeUtils.unescapeHtml3(xmlSource);

String reg = "objURL\":\"http://.+?\\.(gif|jpeg|png|jpg|bmp)";

Pattern pattern = Pattern.compile(reg);

Matcher m = pattern.matcher(xmlSource);

while (m.find()) {

JsoupImageVO jsoupImageVO = new JsoupImageVO();

String imageURL = m.group().substring(9);

if(imageURL==null || "".equals(imageURL)){

String defaultURL = "http://qnimg.zowoyoo.com/img/15463/1509533934407.jpg";

jsoupImageVO.setUrl(defaultURL);

}else{

jsoupImageVO.setUrl(imageURL);

}

jsoupImageVO.setName(hotelId);

result.add(jsoupImageVO);

}

return result;

}

这里最主要的地方就是reg这个正则表达式,通过正则表达式,去网页中解析符合规定的图片URL地址,然后封装在对象中。

最后一部分就是通过java的io流去图片地址获取图片,并保存在本地。核心代码如下:

//根据图片网络地址下载图片

public static void download(String url,String name,String path){

File file= null;

File dirFile=null;

FileOutputStream fos=null;

HttpURLConnection httpCon = null;

URLConnection con = null;

URL urlObj=null;

InputStream in =null;

byte[] size = new byte[1024];

int num=0;

try {

dirFile = new File(path);

if(dirFile.exists()){

dirFile.delete();

}

dirFile.mkdir();

file = new File(path+"//"+name+".jpg");

fos = new FileOutputStream(file);

if(url.startsWith("http")){

urlObj = new URL(url);

con = urlObj.openConnection();

httpCon =(HttpURLConnection) con;

in = httpCon.getInputStream();

while((num=in.read(size)) != -1){

for(int i=0;i

fos.write(size[i]);

}

}

}catch (FileNotFoundException notFoundE) {

LogUtils.writeLog("找不到该网络图片....");

}catch(NullPointerException nullPointerE){

LogUtils.writeLog("找不到该网络图片....");

}catch(IOException ioE){

LogUtils.writeLog("产生IO异常.....");

}catch (Exception e) {

e.printStackTrace();

}finally{

try {

fos.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}

这里面的操作都是java中io篇一些基础的操作,有不懂的可以去看看java中io模块的内容。

因为我这边是maven项目,所以在开发前需要引入Jsoup依赖才可以。

源码可点击此处本站下载。

更多关于java相关内容感兴趣的读者可查看本站专题:《Java网络编程技巧总结》、《Java Socket编程技巧总结》、《Java文件与目录操作技巧汇总》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值