java 图片爬虫_论坛图片爬虫的一种实现
1背景
经常上贴图的论坛(Discuz!),每次打开帖子的时候,由于帖子的图片太多,每次都要等不少时间才能看到所有的图片,比较麻烦;同时经常会打开看过的帖子。为了解决这个问题,写了个小爬虫,定期把最新的帖子中的图片下载到本地。
2目标
自动登录、智能发现为抓取的帖子、智能提取图片URL、多线程下载到本地。
3整体流程图
4,使用到的工具和软件
VisualSVN Server:Windows下的SVN服务,使用非常简单和傻瓜,windows下个人开发强力推荐。更多可参考:
Paros:web安全漏洞扫描工具。可拦截所有的HTTP的请求和相应。这里用来分析登录时提交的数据。
Firebug, mvn:这个不多说了,谁用谁知道。
5,使用到的框架
http client 4.1。 用来发起Http get和post请求。本来用的是3.1版本,结果多线程下载的时候,底层出现了线程死锁问题。看到官网也强力推荐升级,然后升级解决了这个问题。
6,关键代码和步骤
Cookie的手动处理
httpclient没有自动把登录的cookie信息放到请求的消息头里,需要手工处理。
HttpGet httpget = new HttpGet(url);
if (isNeedLogin) {
httpget.setHeader("Cookie", getCookieString());
}
public static String getCookieString() {
StringBuffer stringBuffer = new StringBuffer();
for (Cookie item : logoncookies) {
stringBuffer.append(item.toString());
stringBuffer.append(";");
}
if (stringBuffer.length() > 1) {
return stringBuffer.substring(0, stringBuffer.length() - 1)
.toString();
}
return stringBuffer.toString();
}
Http client多线程设置:
ThreadSafeClientConnManager cm = new ThreadSafeClientConnManager();
cm.setMaxTotal(50);
// 多线程的
httpClient = new DefaultHttpClient(cm);
图片下载代码:
/**
* 下载图片到本地
*
* @return 是否发生网络异常
*/
public static boolean downloadPic(String url, String path) {
// GetMethod get = new GetMethod(url);
HttpGet httpget = new HttpGet(url);
try {
HttpResponse resp = httpClient.execute(httpget);
File storeFile = new File(path);
// 得到网络资源的字节数组,并写入文件
FileOutputStream out = new FileOutputStream(storeFile);
InputStream in = resp.getEntity().getContent();
byte[] buffer = new byte[1024];
int count = -1;
while ((count = in.read(buffer)) != -1) {
out.write(buffer, 0, count);
}
out.flush();
out.close();
} catch (Exception e) {
log.error("线程" + Thread.currentThread().getName()
+ "号. 下载图片异常. URL为" + url, e);
return false;
}
return true;
}
mvn创建java工程的命令:
mvn archetype:create -DgroupId=com.mike -DartifactId=picgetter -DpackageName=org.mike
7,展望
BT视频的自动下载,最近迅雷开放了API,通过JNI的方式调用迅雷,就可以实现视频的自动下载,不过现在暂时没有这个需求。
java 图片爬虫_论坛图片爬虫的一种实现相关推荐
- python网络爬虫_爬图片
python网络爬虫_爬图片 1.安装 Beautifulsoup4 #解析返回的html与json数据pip install Beautifulsoup4 使用 : 运行后输入要 ...
- Python_爬虫_网页图片下载_その日の紋
Python_爬虫_网页图片下载_その日の紋 项目效果 项目需求 项目分析 URL分析 页面分析 项目实施 项目源码 项目效果 项目需求 目标页面:https://www.hanakomon.jp/c ...
- img绝对路径图片显示_使用python爬虫去风景图片网站批量下载图片
使用python爬虫(requests,BeautifulSoup)去风景图片网站批量下载图片 1.写代码背景: 今天闲来无事,想弄点图片放到电脑,方便以后使用,故去百度查找一些风景图片网站,发现图片 ...
- python 图片地址_【Python爬虫】第四课(查询照片拍摄地址)
首先,要能够查询到照片地址,查询的照片必须要开GPS拍,且上传时用原图-- 查询图片的exif信息,使用exifread包 import exifread img = exifread.process ...
- java captcha 验证码_验证码图片生成工具类——Captcha.java
验证码图片生成工具,使用JAVA生成的图片验证码,调用getRandcode方法获取图片验证码,以流的方式传输到前端页面. import java.awt.Color; import java.awt ...
- java炸弹人素材_炸弹人图片_炸弹人模板_炸弹人设计素材下载
[{"id":658285,"url":"https://www.tooopen.com/view/658285.html","t ...
- java压缩源代码_压缩图片大小(Java源码)
/** * * 直接指定压缩后的宽高: * @param oldFile * 要进行压缩的文件 * @param width * 压缩后的宽度 * @param height * 压缩后的高度 * @ ...
- java中反爬虫_反网络爬虫策略(转自Javaeye)
[随着网络的迅速发展,万维网成为大量信息的载体,如何有效地提取并利用这些信息成为一个巨大的挑战.搜索引擎(Search Engine),例如传统的通用搜索引 ...] 爬虫有好处也有坏处: 威胁主要是 ...
- java抓新闻_【图片】【抓取】Java获取各大网站新闻【java吧】_百度贴吧
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 下面上源码,用一小时做的,还有些bug package Getnews; import java.io.*; import java.net.*; imp ...
最新文章
- 10.30 linux和windows互传文件,用户配置文件和密码配置文件,用户组管理,用户管理...
- SqlBulkCopy与触发器,批量插入表(存在则更新,不存在则插入)
- (转载)VS2010/MFC编程入门之一(VS2010与MSDN安装过程图解)
- .net访问PostgreSQL数据库发生“找不到函数名”的问题追踪
- information_schema.routines 学习
- [BUUCTF-pwn]——picoctf_2018_echo back
- 大道至简第七章第八章
- 双非计算机专业考研西安交通大学,2020双非一战计算机专硕初试403经验贴
- LOJ10121 与众不同
- mysql8.0版本的服务器名称_Linux服务器配置-VSFTP服务配置(六)
- 【Java】《基于Java的面向对象范式》学习笔记分享
- mysql explain insert_mysql explain详解
- qtableview选中第一行时表头会变色_超新颖的Word目录制作法,包你一看就会!【Word教程】...
- linux sub减法指令出错,sparc的指令的一些总结
- Python数据分析与处理(例题)
- Java 实现用户登录项目
- 人工智能与大数据时代-2020
- ksps什么单位_[转载]采样频率Hz 采样率KSPS或MSPS,两种单位的换算关系
- java List去除重复数据的五种方式
- iptables -j MARK --set-xmark 解析
热门文章
- 2022年春季学期期中考核
- Spark RDD常用算子使用总结
- 在CDH 6.3.1上安装HAWQ 2.4.0
- 当日竟涨6000万播放,三农新号靠这一个套路爆了
- 李国庆:签约孟羽童保底要400万
- K2 BPM PaaS签约福耀玻璃:面向微服务应用下的BPM应用平台
- error: unable to execute command: Segmentation fault: 11 解决办法
- 【皮皮哥资源网】问道 (二)
- android编译命令及.mk文件浅析
- ubuntu python serial实现串口数据收发