javaweb基于内容的图片搜索(2)_java爬虫

这一个博文主要就是如何去爬特定关键字的图;

怎样爬图呢?或者从哪儿去爬图呢?这是首先要考虑的问题。

开始我想到了百度,就是百度图片,利用下面的url:

http://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1460352369285_R&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&word=狗

仅仅需要把最后一个改成目标检索就可以了,然后我再用jsoup来解析,但是这里就遇到了第一个问题,就是js的问题,

在经过折腾后,我发现如果单纯用jsoup,解析后的原网页仅仅是一部分,也就是我们经常是,下拉条往下,然后就有很多图片,但通过解析原网页,可以看到这样的

字符串后面就是目标图片网页:


也就是说,我能得到图片了,这个问题解决了,百度剩下的无尽的图片肯定是用js动态生成。

接着下一个问题,如何能链接到原网页,也就是我能得到这个图片出现的网页呢?

最终是使用搜狗的引擎来偷图

但是又需要,经过多次把弄后,我决定换一个源头,用搜狗的图片--它的可以得到原网页,并且图片更多~

但是呢?搜狗的并不能通过url来直接获得所要搜索的目标图片。如图:

这个时候就要用htmlunit了,模拟搜狗搜索来“搜索”我要的图片集,这里贴出代码截图:

部分代码:

/**
	 * 通过htmlunit来获得一些搜狗的网址。
	 * 通过模拟鼠标点击事件来实现
	 * @param key
	 * @return
	 * @throws Exception
	 */
	public String getNextUrl(String key){
		String page = new String();
		try {
			WebClient webClient = new WebClient();
			webClient.getOptions().setCssEnabled(false);
			webClient.getOptions().setJavaScriptEnabled(false);
			//去拿网页
			HtmlPage htmlPage = webClient.getPage("http://pic.sogou.com/");
			//得到表单
			HtmlForm form = htmlPage.getFormByName("searchForm");
			//得到提交按钮
			HtmlSubmitInput button = form.getInputByValue("搜狗搜索");
			//得到输入框
			HtmlTextInput textField = form.getInputByName("query");
			//输入内容
			textField.setValueAttribute(key);
			//点一下按钮
			HtmlPage nextPage = button.click();
			String str = nextPage.toString();
			page = cutString(str);
			webClient.close();
		} catch (Exception e) {
			e.printStackTrace();
		} 
		return page;
	}


到这儿,我的图片就搜到了,再由下面的两个图片就可以知道我既可以获得源图片,又可以获得原图片网址:

也就是一个page_url和一个pic_url,这样就大功告成了。

这之后,为了能更好的体现项目的可使用性,后台管理界面通过关键字来爬取:


其中在onblur函数中使用ajax来动态判定关键字是否已经存在如果已经存在,则无法继续添加。

当添加完关键字后,就可以在爬图界面进行手动点击操作:


当删除时会将关键字以及图片信息都删除。

在“是否生成索引”这一栏,1表示已经爬好图并且生成索引,0表示尚未生成。

当爬完后,相应的图片信息就会存储到数据库中:


以上就是java后台爬图的整个过程。

有需要的童鞋可以看我其他的文章:http://blog.csdn.net/column/details/javaweb-lire-jsoup.html

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值