Java实现抓取百度识图结果的实现和思路-1-创造百度识图的URL链接

(一个小白文,大神勿喷)

第一次突发奇想想写一个博客,非专业的,决定写点东西,想拿点干货出来,就想把我的识图项目拿出来开源_(:зゝ∠)_。

    一个未成年,也敢写原创文章,就是因为百度到的抓取百度识图源码大都是不能运行完整的(至少我找了一段时间也没有找到),其中精易论坛的百度识图也只能获取部分源码,最多不超过100个,而且图片过大(貌似超过2MB的话),就会抓取失败

借鉴过一些教程,例如上传图片的教程、请求头设置、正则表达式等等_(:зゝ∠)_。

不说了,开始了。




最初想抓取百度识图结果,是因为百度识图是国内识图精度较高的识图之一,打算用于内部使用,不过因为我不会写UI(java的确难写,就弃坑了)

(如果有谁写出UI的话,能否给我一份:-D),似乎运用在机器训练和美工素材库方面有着绝佳地效果(当然还得看情况!_(:зゝ∠)_)

需要材料:

httpclient4.5(可能需要比较多的包)

Java


时刻开启F12

相信大家第一次上传图片的时候一定饶了很多弯路,我也是,我甚至想用按键精灵来实现图片上传的功能,不过总会有闪屏,就取消了...

上传的原理:
目标URL+参数+POST请求

代码实现:

//制造需要POST的链接

private static String getPostUrl(File img){
        String upPostUrl="http://image.baidu.com/n/image?fr=html5&target=pcSearchImage&needJson=true&id=WU_FILE_0";
        String fileName="&name="+URLEncoder.encode(img.getName())+"&type=image";//文件名,大都需要URL转码
        Calendar cd = Calendar.getInstance();  
        cd.setTimeInMillis(img.lastModified());   //最后改变的时间,还是什么时间来着?        
        SimpleDateFormat sdf = new SimpleDateFormat("EEE%20MMM%20d%20yyyy%20HH:mm:ss%20'GMT'+0800%20", Locale.US);  
        sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
        String lastTimeName="&lastModifiedDate="+sdf.format(cd.getTime()).toString();//创造格林时间
        String sizeName="&size="+img.length();//获取文件大小
        //将文件名、文件大小、文件最后的修改时间和upPostUrl组合起来
        upPostUrl+=fileName+lastTimeName+ "(%E4%B8%AD%E5%9B%BD%E6%A0%87%E5%87%86%E6%97%B6%E9%97%B4)"+sizeName;
        return upPostUrl;
}


这种上传的链接都比较难找,我也是摸索了很久才知道,这个post的链接是在上传之后才有的

手速不快的话,根本抓不到(网速慢的好处就是获取上传目标链接十分方便:-D)

//获取Post之后的json
public static String upload(File file) throws ClientProtocolException, IOException{
        //调用上面的方法,并把postURL的值用于创造HttpPost对象
        HttpPost post=new HttpPost(getPostUrl(file));
        /**
        目前只会用设置文件实体的方式来上传文件......
        MultipartEntity不会用......
        */
        FileEntity entity=new FileEntity(file);
        //设置文件实体
        post.setEntity(entity);
        //设置请求头
        post.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 LBBROWSER");
        return downLoad.download(downLoad.client.execute(post).getEntity().getContent());//获取流然后下载(downLoad是我自己写得断点传输)
}


未完待续(根据人数来决定是否要继续写下去,不过想想也挺好笑的:-D)......


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值