先看看抓取的结果。
抓关键字“美女”的百度图片:
抓关键字“美女”的Google图片:
抓关键字“美女”的Bing图片:
8个Java类:
- Startup.java - main函数
- ImageCrawler.java - Crawler基类
- BaiduImageCrawler.java - 百度图片的具体爬取实现
- GoogleImageCrawler.java - Google图片的具体爬取实现
- BingImageCrawler.java - Bing图片的具体爬取实现
- ImageWorker.java - 定时从Queue中取图片URL下载(默认开启100个)
- ImageDownloader.java - 图片下载
- MD5Checksum.java - 文件MD5计算(文件去重)
以下是三个搜索引擎的具体抓取实现。完整的代码:
点击下载
public class BaiduImageCrawler extends ImageCrawler {
//tn:resultjsonavatarnew
//ie:utf-8 字符编码(ie输入 oe输出)
//word:美女 搜索关键字
//pn:60 开始条数
//rn:30 显示数量
//z:0 尺寸(0全部尺寸 9特大 3大 2中 1小)
//width:1024 自定义尺寸-宽
//height:768 自定义尺寸-高
//ic:0 颜色(0全部颜色 1红色 2黄色 4绿色 8青色 16蓝色 32紫色 64粉色 128棕色 256橙色 512黑色 1024白色 2048黑白)
//s:0 3头像图片
//face:0 1面部特写
//st:-1 -1全部类型 1卡通画 2简笔画
//lm:-1 (6动态图片 7静态图片)
//gsm:3c pn值的十六进制数
private static final String BAIDU_IMAGE_SEARCH_URL = "http://image.baidu.com/search/avatarjson?tn=resultjsonavatarnew&ie=utf-8&word=%s&pn=%d&rn=%d&z=3&ic=0&s=0&face=0&st=-1&lm=-1&gsm=%s";
private static final int PAGE_SIZE = 60;
private static final String IMAGE_URL_REG = "\"objURL\":\"(https?://[^\"]+)\"";
private static final Pattern IMAGE_PATTERN = Pattern.compile(IMAGE_URL_REG);
@Override
public String getSearchUrl(String keyword, int page) {
int begin = page * PAGE_SIZE;
return String.format(BAIDU_IMAGE_SEARCH_URL, keyword, begin, PAGE_SIZE, Integer.toHexString(begin));
}
@Override
public int parseImageUrl(ConcurrentLinkedQueue<String> queue, StringBuffer data) {
int count = 0;
Matcher matcher = IMAGE_PATTERN.matcher(data);
while (matcher.find()) {
queue.offer(matcher.group(1));
count++;
}
return count;
}
}
public class GoogleImageCrawler extends ImageCrawler {
//tbm=isch
//q=美女 搜索关键字
//ijn=0 页码(***Google只提供到0到8页数据!)
//start=0 开始条数
//tbs=isz:l 搜索条件
// 尺寸
// tbs=isz:l 大
// tbs=isz:m 中
// 颜色
// tbs=ic:color 彩色
// tbs=ic:gray 黑白
// tbs=ic:trans 透明
// 类型
// tbs=itp:face 脸部特写
// tbs=itp:photo 照片
// tbs=itp:clipart 剪贴画
// tbs=itp:lineart 素描画
// tbs=itp:animated 动画
// 条件组合
// tbs=isz:l,ic:color,itp:face
private static final String GOOGLE_IMAGE_SEARCH_URL = "https://www.google.com/search?tbm=isch&q=%s&ijn=%d&start=%d&tbs=isz:l";
private static final int PAGE_SIZE = 100;
private static final String IMAGE_URL_REG = "\"ou\":\"(https?://[^\"]+)\"";
private static final Pattern IMAGE_PATTERN = Pattern.compile(IMAGE_URL_REG);
@Override
public String getSearchUrl(String keyword, int page) {
int begin = page * PAGE_SIZE;
return String.format(GOOGLE_IMAGE_SEARCH_URL, keyword, page, begin);
}
@Override
public int parseImageUrl(ConcurrentLinkedQueue<String> queue, StringBuffer data) {
int count = 0;
Matcher matcher = IMAGE_PATTERN.matcher(data);
while (matcher.find()) {
queue.offer(matcher.group(1));
count++;
}
return count;
}
}
public class BingImageCrawler extends ImageCrawler {
//async=content
//q=美女 搜索关键字
//first=118 开始条数
//count=35 显示数量
private static final String BING_IMAGE_SEARCH_URL = "http://www.bing.com/images/async?async=content&q=%s&first=%d&count=%d";
private static final int PAGE_SIZE = 35;
private static final String IMAGE_URL_REG = "imgurl:"(https?://[^,]+)"";
private static final Pattern IMAGE_PATTERN = Pattern.compile(IMAGE_URL_REG);
@Override
public String getSearchUrl(String keyword, int page) {
int begin = page * PAGE_SIZE;
return String.format(BING_IMAGE_SEARCH_URL, keyword, begin, PAGE_SIZE);
}
@Override
public int parseImageUrl(ConcurrentLinkedQueue<String> queue, StringBuffer data) {
int count = 0;
Matcher matcher = IMAGE_PATTERN.matcher(data);
while (matcher.find()) {
queue.offer(matcher.group(1));
count++;
}
return count;
}
}
抓取过程的log:
- 大小: 120 KB
- 大小: 121.8 KB
- 大小: 97.7 KB
- 大小: 86.5 KB
- 大小: 125.9 KB
- 大小: 96.3 KB
分享到:
相关推荐
python3爬虫 根据关键字搜索爬取并下载bing上相关图片
这次继续选择利用bing搜索抓取图片练习下,代码放在最下供大家参考。程序需要传入三个参数,图片关键词、图片保存路径、需要抓取的数量。运行过程中可能会有一些错误(大部分的是网络错误,比如超时等)我这里捕获到...
python语言编写的百度、bing爬虫脚本,可以设置关键词爬取百度、bing上面的图片。 里面包含pip依赖requirements.txt,先安装依赖 pip install requirements.txt,再运行脚本。 如有不明白的地方,及时和我联系。 其他...
一个简单地用Py写的爬取壁纸
python爬取Bing每天的图片(csdn)————程序
python2爬取bing主页并作为桌面背景,压缩包中包含py2.7的win32gui,供未安装者使用,且代码第一行注释即其下载地址,若为py3.x可从中下载,py3需要改为urllib.request 使用。
Python爬取Bing首页背景图,简单作为分享会来用
python网络爬取图片,爬取一个网站的图片并保存至本地指定文件夹
爬取图片 简单实现了bing上的图片爬取
其中google和baidu搜索采用http请求实现,bing使用bing java sdk实现。bing搜索需要一个微软的appid,可以用我的,也可以自己去免费申请。bing会限制每个appid的每天查询次数。 google和baidu的结果很好,bing的...
爬虫用于爬取Bing搜索引擎的n页标题,可以改进后作为一个小的搜索api 有一定的小bug没有解决,比如爬去标题内容不全,有时候无法爬取,正在解决。
python3.7+BeautifulSoup4爬取bing图片 有详细注解
python 通过scrapy框架,根据关键字爬取百度和bing大图 注意: 1.修改commands/crawl.py run函数为: def run(self, args, opts): if len(args) raise UsageError() # elif len(args) > 1: # raise UsageError...
SpiderGirls 是使用java编写的一个开源软件,使用它用户可以轻松地获得某个给定的关键字下的搜索引擎的结果,现在支持bing搜索和sogou搜索。 主页: ...
#注入requests模块 import requests # 获取图片地址 img_url = '...注意:这只限于所爬取图片的权限是免费的,不是各大平台所发布的图片
利用WebRequest和WebResponse及文件操作方法下载bing的背景图片。
java实现的每天自动下载bing美图,解压之后运行start.bat文件即可,简单方便,十分容易。
直接上代码:复制代码 代码如下:<span xss=removed># -*- coding: cp936 -*-import urllibimport osprint ‘Download data……’url = ‘http://cn.bing.com’urlFile = urllib.urlopen(url)data = urlFile.read()url...