热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java图片爬虫_论坛图片爬虫的一种实现

1背景经常上贴图的论坛(Discuz!),每次打开帖子的时候,由于帖子的图片太多,每次都要等不少时间才能看到所有的图片,比较

1背景

经常上贴图的论坛(Discuz!),每次打开帖子的时候,由于帖子的图片太多,每次都要等不少时间才能看到所有的图片,比较麻烦;同时经常会打开看过的帖子。为了解决这个问题,写了个小爬虫,定期把最新的帖子中的图片下载到本地。

2目标

自动登录、智能发现为抓取的帖子、智能提取图片URL、多线程下载到本地。

3整体流程图

b0e837bcc2b66b6f857c3c8ca442ab3f.png

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的方式调用迅雷,就可以实现视频的自动下载,不过现在暂时没有这个需求。



推荐阅读
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 本文详细探讨了如何通过分析单个或多个线程在瓶颈情况下的表现,来了解处理器资源的消耗。无论是单进程还是多进程环境,监控关键指标如线程数量、占用时间及调度优先级等,有助于揭示潜在的性能问题。 ... [详细]
  • 本文介绍了一个基于 Java SpringMVC 和 SSM 框架的综合系统,涵盖了操作日志记录、文件管理、头像编辑、权限控制、以及多种技术集成如 Shiro、Redis 等,旨在提供一个高效且功能丰富的开发平台。 ... [详细]
  • 深入剖析JVM垃圾回收机制
    本文详细探讨了Java虚拟机(JVM)中的垃圾回收机制,包括其意义、对象判定方法、引用类型、常见垃圾收集算法以及各种垃圾收集器的特点和工作原理。通过理解这些内容,开发人员可以更好地优化内存管理和程序性能。 ... [详细]
  • TortoiseSVN与VisualSVN Server的安装及基本操作指南
    本文详细介绍了如何安装VisualSVN Server以及TortoiseSVN客户端,并提供了基本的操作步骤,包括配置仓库、用户管理及权限设置等关键环节。 ... [详细]
  • 本文详细介绍了Git分布式版本控制系统中远程仓库的概念和操作方法。通过具体案例,帮助读者更好地理解和掌握如何高效管理代码库。 ... [详细]
  • 本文作者分享了在阿里巴巴获得实习offer的经历,包括五轮面试的详细内容和经验总结。其中四轮为技术面试,一轮为HR面试,涵盖了大量的Java技术和项目实践经验。 ... [详细]
  • JavaScript 中创建对象的多种方法
    本文详细介绍了 JavaScript 中创建对象的几种常见方式,包括对象字面量、构造函数和 Object.create 方法,并提供了示例代码和属性描述符的解释。 ... [详细]
  • 并发编程 12—— 任务取消与关闭 之 shutdownNow 的局限性
    Java并发编程实践目录并发编程01——ThreadLocal并发编程02——ConcurrentHashMap并发编程03——阻塞队列和生产者-消费者模式并发编程04——闭锁Co ... [详细]
  • 推荐几款高效测量图片像素的工具
    本文介绍了几款适用于Web前端开发的工具,这些工具可以帮助用户在图片上绘制线条并精确测量其像素长度。对于需要进行图像处理或设计工作的开发者来说非常实用。 ... [详细]
  • 本文介绍了如何利用Java中的URLConnection类来实现基本的网络爬虫功能,包括向目标网站发送请求、接收HTML响应、解析HTML以提取所需信息,并处理可能存在的递归爬取需求。 ... [详细]
  • 本文将介绍如何利用Python爬虫技术抓取国内主流在线学习平台的数据,并以51CTO学院为例,进行详细的技术解析和实践操作。 ... [详细]
  • 深入分析十大PHP开发框架
    随着PHP技术的发展,各类开发框架层出不穷,成为了开发者们热议的话题。本文将详细介绍并对比十款主流的PHP开发框架,旨在帮助开发者根据自身需求选择最合适的工具。 ... [详细]
  • 前端开发中的代码注释实践与规范
    本文探讨了前端开发过程中代码注释的重要性,不仅有助于个人清晰地回顾自己的编程思路,还能促进团队成员之间的有效沟通。文章将详细介绍HTML、CSS及JavaScript中的注释使用方法,并提出一套实用的注释规范。 ... [详细]
author-avatar
枫殇忆华年
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有