- 浏览: 131384 次
- 性别:
- 来自: 大连
文章分类
最新评论
-
datawarehouse:
datawarehouse 写道ngix 淘宝是基于这个开发了 ...
解密淘宝网的开源架构 -
datawarehouse:
ngix 淘宝是基于这个开发了一个自己的webserver吧。 ...
解密淘宝网的开源架构 -
eyelock:
我运行报错,,楼主能解答一下G,对swing不熟。
raphi ...
假期没事,写了个90行的俄罗斯方块,Java实现,史上最小巧 -
lostsky_11:
楼主写出例子了么?物理碰撞部分可能跟你说的差不多渲染部分可以搜 ...
Where is my water 游戏算法 -
xouou_53320:
都是牛人
假期没事,写了个90行的俄罗斯方块,Java实现,史上最小巧
为朋友的网站写了个小代码,把所有图片下载到本地,有点不道德了,哈哈。。。
不好意思,完全没考虑设计, 就是实现功能,一次性的。呵呵。所以也不顾什么设计模式,什么代码结构了。实现功能就OK了。。
package com.ai.picpicker; import java.io.IOException; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager; import org.htmlparser.util.ParserException; public class PicPicker { public static final String siteUrlPrefix = "http://www.****.com/a********"; public static final String siteUrlSuffix = ".html";; public static final int pageNum = 4;// Sum 20 pages. public static final int startCategory = 1; public static void main(String args[]) throws ParserException, HttpException, IOException, InterruptedException { MultiThreadedHttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager(); HttpClient httpClient = new HttpClient(connectionManager); int picCount = 0; // Main Loop, all page. PickerThread[] ppt = new PickerThread[pageNum]; for (int p = 3; p < pageNum; p++) { ppt[p] = new PickerThread(httpClient, p + 1, startCategory); ppt[p].start(); System.out.println("Thread " + (p + 1) + " Started~~"); ppt[p].join(); } for (int p = 3; p < pageNum; p++) { picCount = picCount + ppt[p].getCount(); } System.out.println("All downloaded file num:" + picCount); } }
package com.ai.picpicker; import java.io.File; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods.GetMethod; import org.htmlparser.NodeFilter; import org.htmlparser.Parser; import org.htmlparser.filters.TagNameFilter; import org.htmlparser.tags.HeadingTag; import org.htmlparser.tags.LinkTag; import org.htmlparser.util.NodeList; public class PickerThread extends Thread { private HttpClient httpClient = null; private int pageNum = 0; private int picCountT = 0; private int startCategory = 0; public PickerThread(HttpClient httpClient, int pageNum, int startCategory) { this.httpClient = httpClient; this.pageNum = pageNum; this.startCategory = startCategory - 1; } public int getCount() { return picCountT; } @Override public void run() { System.out.println("Thread " + pageNum + " Running~~"); File forLogFile = new File("log4thread" + pageNum); FileWriter fwl = null; String picStr = null; try { Parser parser; parser = new Parser("http://www.******.com/a*******" + pageNum + ".html"); fwl = new FileWriter(forLogFile); NodeList nodelist = parser.parse(null); NodeFilter categoryFilter = new TagNameFilter("h4"); NodeList categoryList = nodelist.extractAllNodesThatMatch(categoryFilter, true); GetMethod getPageMethod = null; for (int i = startCategory; i < categoryList.size(); i++) { HeadingTag ht = (HeadingTag) categoryList.elementAt(i); LinkTag lt = (LinkTag) ht.getChild(0); String oneUrl = lt.getLink(); fwl.write("[INFO]" + "Category Num" + i + " Downloading! Url:" + oneUrl + "\n"); getPageMethod = new GetMethod(oneUrl); int statusCode = httpClient.executeMethod(getPageMethod); if (statusCode != HttpStatus.SC_OK) { fwl.write("[ERROR]" + "Method failed: " + getPageMethod.getStatusLine() + "\n"); } else { fwl.write("[INFO]" + "Page" + pageNum + "_" + getPageMethod.getStatusLine() + "\n"); fwl.flush(); byte[] pageBody = getPageMethod.getResponseBody(); getPageMethod.releaseConnection(); String picListHtml = new String(pageBody, "UTF-8").trim(); String picSubStr = picListHtml.substring(picListHtml.indexOf("start"), picListHtml.indexOf("end")); while (picSubStr.indexOf("\"file\"") != -1) { picStr = picSubStr.substring(picSubStr.indexOf("\"file\"") + 8, picSubStr.indexOf("\"pic\"") - 2).replace("\\", ""); StringBuilder sb = new StringBuilder(); sb.append("P").append(pageNum).append("_C").append(i + 1).append("/"); File dir = new File(sb.toString()); if (!dir.exists()) { dir.mkdir(); dir = null; } sb.append(picStr.substring(picStr.indexOf("/", 16) + 1, picStr.length())); File picFile = new File(sb.toString()); if (picFile.exists()) { fwl.write("[ERROR]" + "Duplication picture! FileName:" + sb.toString() + "\n"); if (picSubStr.indexOf("\"pic\"", 7) != -1) { picSubStr = picSubStr.substring(picSubStr.indexOf("\"pic\"", 7) + 7, picSubStr.length()); } continue; } GetMethod getPicMethod = new GetMethod("http://www.******.com/" + picStr); statusCode = httpClient.executeMethod(getPicMethod); if (statusCode != HttpStatus.SC_OK) { fwl.write("[ERROR]" + "Method failed: " + " URL:" + "http://www.********.com/" + picStr + getPicMethod.getStatusLine() + "\n"); } else { byte[] picBody = getPicMethod.getResponseBody(); getPicMethod.releaseConnection(); FileOutputStream picOutPut = new FileOutputStream(picFile); picOutPut.write(picBody); picOutPut.close(); fwl.write("[INFO]" + "Pic" + picCountT++ + " URL:" + "http://www.*********.com/" + picStr + "\n"); fwl.flush(); System.out.print('.'); } // System.out.println(picStr); if (picSubStr.indexOf("\"pic\"", 7) != -1) { picSubStr = picSubStr.substring(picSubStr.indexOf("\"pic\"", 7) + 7, picSubStr.length()); } } fwl.write("[DEBUG]" + lt.getLink()); fwl.flush(); } System.out.println(); fwl.flush(); } fwl.write("[INFO]" + "Thread " + pageNum + " run over " + picCountT + "pic!!!\n"); fwl.flush(); } catch (Exception e) { System.out.println("Thread " + pageNum + " Exception!!! PicUrl:" + picStr); e.printStackTrace(); } finally { try { if (fwl != null) fwl.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
评论
2 楼
wangshu3000
2012-01-03
greatghoul 写道
很不错,我也经常抓取些图片,当然都是**网站的,如果只是抓取图片,建议使用正则,会快很多。
还有这个run方法大了点儿,可以再分离下。。。
还有这个run方法大了点儿,可以再分离下。。。
不好意思,完全没考虑设计, 就是实现功能,一次性的。呵呵。所以也不顾什么设计模式,什么代码结构了。实现功能就OK了。。
1 楼
greatghoul
2012-01-03
很不错,我也经常抓取些图片,当然都是**网站的,如果只是抓取图片,建议使用正则,会快很多。
还有这个run方法大了点儿,可以再分离下。。。
还有这个run方法大了点儿,可以再分离下。。。
发表评论
-
MyLab
2015-11-23 12:35 367Server-0 OS:Oracle linux Softwa ... -
Learning
2015-03-23 13:43 314HighOAuth2.0Jira Confluence,G ... -
Eclipse 绘制草图的plugin
2013-02-20 15:52 778http://wireframesketcher.com/d ... -
My Environment
2013-01-22 16:19 771PC1-Server OS:RedHat Softwa ... -
话单匹配问题
2012-09-04 15:35 696需求是,有2套话单,每套中有2个字段为关联字段, 话单文件1 ... -
Senior Solution Architect(Systems)
2012-02-28 11:03 807努力方向. The Senior Solution Archi ... -
从一篇文章中筛选处辞典生词本中没有的单词,导出成txt文件
2012-02-23 16:28 1025代码些的比较烂,只是从几篇文章中过滤处单词本中没有的单词,导出 ... -
关于火车订票系统瓶颈的分析及解决方案
2012-01-09 09:12 2432需求描述 1.网站订票 2.身份证实名验证 思考 1.根据新 ... -
[疑问]关于NIO的耗时服务端业务逻辑问题????
2012-01-04 16:59 1660研究了一下NIO的非阻塞连接。。似乎有点问题。。 当服务端处理 ... -
写了个小代码,统计史蒂夫乔布斯传英文版的单词数量
2011-12-11 15:58 842package com.ai; import java. ... -
软件项目版本号的命名规则及格式介绍
2011-01-12 10:19 915版本控制比较普遍 ... -
中文编码基础知识介绍
2009-01-22 15:30 906GB2312 范围: 0xA1A1 - 0xFEFE 汉字范围 ... -
软件架构
2008-12-26 16:03 897软件架构(software arch ... -
理解架构师
2008-12-26 15:35 954架构师应该精通分析和设计。架构师应该比常人容易理解事物的基本原 ... -
架构和架构设计师
2008-12-26 15:34 982系统架构通俗的说起来 ... -
构架师之路
2008-12-12 11:08 829胡德平◎《Java联盟》客栈论坛 构架师(Archit ... -
软件架构师成长之路
2008-12-12 11:07 957对于任何一个软件开发 ... -
大型网站架构之:MySpace的体系架构
2008-10-26 01:31 1130MySpace.com有着6500万的订 ... -
IT网站
2008-10-02 23:24 950一、IT技术开发综合类 http://community ... -
一位软件工程师的6年总结
2008-10-02 10:04 986“又是一年毕业时”, ...
相关推荐
早先年,驰骋网络,积累了很多源代码…… 互联网的基因、骨头里就是自由、分享,非常感谢没有墙的时代,无限怀念,想想当时的BBS,俱往矣~ ...用爬虫吧,当然爬虫只能爬所有http资源,数据库中的就得用另法了,呵呵~
蜘蛛 爬虫 抓取网页内容 抓取url 搜索引擎 程序jar包
精华志 蜘蛛爬虫,递归抓取页面的URL 抓取页面URL 京华志&精华志出品 分享资源 C# ASP.NET SQL DBA 源码
蜘蛛爬虫程序实现 可抓取网页内容,抓取url
蜘蛛日志在线分析工具是一款开源的工具,可用于快速分析网站访问日志中搜索引擎网络爬虫的抓取记录。如果你的服务器运行在linux宝塔面板环境下,你只需要登录宝塔面板的linux控制面板,在左侧导航栏中点击”文件”,...
网站日志蜘蛛在线分析工具源码 日志可视化管理工具源码 快速分析搜索引擎网络爬虫抓取记录 如果是 linux 宝塔面板 的服务器自然环境,大家登陆宝塔面板linux控制面板后,点一下左边“文件”,在www下的wwwlogs文件...
刨丁解羊中文分词器,主要用于对网络蜘蛛或网络爬虫抓取的网页进行分词,支持繁体中文分词、简体中文分词、英文分词,是制作通用搜索引擎和垂直搜索引擎的核心组件。该软件在普通PC机器上测试显示:TXT格式正文分词...
网站日志蜘蛛在线分析工具源码 日志可视化管理工具源码 快速分析搜索引擎网络爬虫抓取记录 如果是 linux 宝塔面板 的服务器自然环境,大家登陆宝塔面板linux控制面板后,点一下左边“文件”,在www下的wwwlogs文件...
网站日志蜘蛛在线分析工具源码 日志可视化管理工具源码 快速分析搜索引擎网络爬虫抓取记录 如果是 linux 宝塔面板 的服务器自然环境,大家登陆宝塔面板linux控制面板后,点一下左边“文件”,在www下的wwwlogs文件...
网络蜘蛛 网络爬虫 搜索整站源代码 c# asp.net winfrom 网络抓取
一个C#写的图片抓取程序,稍加修改同样适用于网页内容获取!因为是初学者,写的不好多多见谅!
用于nodejs的网络爬虫抓取器蜘蛛_JavaScript_HTML_下载.zip
相信许多的站长、博主可能最关心的无非就是自己网站的收录情况,一般情况下我们可以通过查看空间服务器的日志文件来查看搜索引擎到底爬取了我们哪些个页面,不过,如果用php代码分析web日志中蜘蛛爬虫痕迹,是比较好...
Java网络爬虫(蜘蛛)源码是一种用Java语言编写的程序,它可以模拟人类在互联网上的浏览并抓取信息。这种程序可以在互联网上自动地搜索和提取数据,并将其保存在本地计算机上,以供后续处理和分析。通过使用Java网络...
商剑分布式网络蜘蛛,性能高速运转,能耗尽全部带宽,可批量采集海量数据的网页,若几百台服务器安装商剑...更是搜索引擎-网络蜘蛛-网络爬虫-spider-网页抓取等技术的必备工具之一。http://www.100spider.cn/wspider.rar
本教程将实际操作使用Python Scrapy框架爬取传智播客...尽管小刮刮原本是设计用来屏幕抓取(更精确的说,是网络抓取)的目的,但它也可以用来访问API来提取数据,比如Amazon的AWS或者用来当作通常目的应用的网络蜘蛛。