- 浏览: 561295 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (478)
- lucene (45)
- oracle (19)
- nutch (2)
- blog (2)
- 垂直搜索 (19)
- java综合 (89)
- spring (15)
- Hibernate (9)
- Struts (9)
- Hadoop (16)
- Mysql (12)
- nosql (10)
- Linux (3)
- MyEclipse (4)
- Ant (1)
- 设计模式 (19)
- JBPM (1)
- JSP (1)
- HtmlParser (5)
- SVN (2)
- 插件 (2)
- 收藏 (7)
- Others (1)
- Heritrix (18)
- Solr (4)
- 主题爬虫 (31)
- 内存数据库 (24)
- 分布式与海量数据 (32)
- httpclient (14)
- Tomcat (1)
- 面试宝典 (6)
- Python (14)
- 数据挖掘 (1)
- 算法 (6)
- 其他 (4)
- JVM (12)
- Redis (18)
最新评论
-
hanjiyun:
本人水平还有待提高,进步空间很大,看这些文章给我有很大的指导作 ...
JVM的内存管理 Ⅲ -
liuxinglanyue:
四年后的自己:这种方法 不靠谱。 使用javaagent的方式 ...
计算Java对象占用内存空间的大小(对于32位虚拟机而言) -
jaysoncn:
附件在哪里啊test.NoCertificationHttps ...
使用HttpClient过程中常见的一些问题 -
231fuchenxi:
你好,有redis,memlink,mysql的测试代码吗?可 ...
MemLink 性能测试 -
guyue1015:
[color=orange][/color][size=lar ...
JAVA同步机制
http://guoyunsky.iteye.com/blog/644396 前面说过Heritrix可以在某个抓取基础上(这里假设为A)继续抓取,因为Heritrix对每一个URL都会有相应的日志处理,同时还有checkpoint(备份中心)。所以只要通过A上的日志就可以完全按照该基础A继续抓取,不会重复抓取任何A抓过的任何东西,也会继续抓取A没有抓过的URL。做到这个有两种方法,一种是针对Web启动的,还有一种是针对我上次写的不通过Web启动的方式(启动方式见博客:Heritrix源码分析(五) 如何让Heritrix在Ecplise等IDE下编程启动). 1)下面介绍这两种启动方式,第一种,通过Web启动: 进入页面,选择:Jobs->Base on a recovery->然后再选择你要二次抓取的Job中的recover-log->然后再点击按钮Submit Job。之后回到Console页面,点击Start。之后就开始再你想要的基础上抓取了。你可以进入这个新建的抓取JOB下的logs目录,发现里面有个recover.gz大小跟你想要二次抓取JOB中的recover.gz大小一般大。以及你去查看该job下的order.xml中的<string name="recover-path"></string>中间的值发现就是你要二次抓取job下recover.gz的绝对目录 2)不通过Web方式启动: 这个相对简单,只要修改order.xml中<string name="recover-path">D:/recover.gz</string>,中间的值就是你想二次抓取的JOB中logs目录下recover.gz的绝对路径。 同时最好更新一下值为: 至于为什么要这样设置,请参考我关于order.xml介绍的博客:Heritrix源码分析(二) 配置文件order.xml介绍 同时可能你已经知道某些URL不需要抓取,比如从数据库导出来的,而这些URL你的Heritrix并没有处理过。所以这些外部的URL就无法通过以上两种办法导入Heritrix了。这里我写了个工具类,有两种方式,一种是你将URL都放在文件中,然后通过这个工具类从这个文件中读取这些URL(必须一行一个URL),导入到Heritrix中。还有一种方法是针对数据库的,你只要提供相应的ResultSet以及该URL对应数据库的字段名,也可以导入Heritrix,下面贴上代码:
<boolean name="checkpoint-copy-bdbje-logs">true</boolean>
<boolean name="recover-retain-failures">false</boolean>
<boolean name="recover-scope-includes">false</boolean>
<boolean name="recover-scope-enqueues">false</boolean>import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.archive.crawler.frontier.RecoveryJournal;
public class UrlToRecoverUtil {
/**
* 从文件中导入URl到recover.gz以便URL不再被抓取
*
* @param sourceFilePath URL来源文件
* @param sourceFileEncoding URL来源文件的编码
* @param recoverGzPath 要写到的recover.gz文件目录
* @param recoverGzFileName recover.gz文件名,可以为空
* @return
*/
public static boolean urlToRecoverUtilByFile(String sourceFilePath,String sourceFileEncoding,String recoverGzDir,String recoverGzFileName){
boolean result=false;
InputStream is=null;
InputStreamReader isr=null;
BufferedReader br=null;
File sourceFile=null;
String line=null;
RecoveryJournal recover = null;
try {
sourceFile=new File(sourceFilePath);
//recover.gz文件为空则采用默认名字
if(recoverGzFileName==null||recoverGzFileName.equals("")){
recoverGzFileName="recover.gz";
}
recover=new RecoveryJournal(recoverGzDir,recoverGzFileName);//构造recover.gz对象
//读取文件内容
is=new FileInputStream(sourceFile);
isr=new InputStreamReader(is,sourceFileEncoding);
br=new BufferedReader(isr);
//一行一行写入recover.gz文件
while((line=br.readLine().trim())!=null){
if(!line.equals("")){
recover.writeLine(RecoveryJournal.F_SUCCESS, line);
}
}
result=true;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if(recover!=null){
recover.close();
}
if(br!=null){
br.close();
}
if(isr!=null){
isr.close();
}
if(is!=null){
is.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return result;
}
/**
* 从ResultSet结果集中获取URL导入到recover.gz以便URl不再被抓取
*
* @param rs ResultSet结果集
* @param filedName ResultSet结果集中要获取URL对应的字段名
* @param recoverGzDir 要写到的recover.gz文件目录
* @param recoverGzFileName recover.gz文件名,可以为空
* @return
*/
public static boolean urlToRecoverUtilByResultSet(ResultSet rs,String filedName,String recoverGzDir,String recoverGzFileName){
boolean result=false;
String line=null;
RecoveryJournal recover = null;
try {
if(recoverGzFileName==null||recoverGzFileName.equals("")){
recoverGzFileName="recover.gz";
}
recover=new RecoveryJournal(recoverGzDir,recoverGzFileName);
if(rs!=null){
while(rs.next()){
line=rs.getString(filedName).trim();
if(!line.equals("")){
recover.writeLine(RecoveryJournal.F_SUCCESS, line);
}
}
result=true;
}
} catch (SQLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if(rs!=null){
rs.close();
}
if(recover!=null){
recover.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
return result;
}
/**
* @param args
*/
public static void main(String[] args) {
/*
* 示例,从结果集中写入URL到recover.gz
*/
Connection con=null;
Statement stmt=null;
ResultSet rs=null;
String sql="SELECT CLASSIFY_INFO_URL FROM CLASSIFY_INFO";
boolean result=false;
try {
con=DatabaseUtil.getConnection_Mysql_CrawlServer_Local();//获取Connection
stmt=con.createStatement();
rs=stmt.executeQuery(sql);
result=urlToRecoverUtilByResultSet(rs,"CLASSIFY_INFO_URL","D:/HeritrixRecover/",null);
System.out.println("从结果集中导入URL到recover.gz文件:"+(result?"成功!":"失败!"));
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
DatabaseUtil.closeConnection(con, stmt, rs);//关闭Connection、Statement、ResultSet
}
}
}
这个工具类其实主要也只是生成recover.gz文件。如果你采用Web方式启动,你只要找到一个你抓取过的JOB,然后用这个生成的recover.gz目录覆盖你找到job下logs目录中的recover.gz即可。而如果你采用非Web启动就更简单了,只要将order.xml中<string name="recover-path">D:/recover.gz</string>中的值改成你生成recover.gz绝对路径即可!
发表评论
-
网络爬虫heritrix
2010-12-04 20:41 1335前段时间看了下关于网络爬虫的知识,其中的heritrix是 ... -
Heritrix使用的初步总结
2010-11-21 12:09 1057转:http://jason823.iteye.com/b ... -
Heritrix源码分析(十五) 各种问题总结
2010-11-21 11:11 920http://guoyunsky.iteye.com/bl ... -
Heritrix源码分析(十四) 如何让Heritrix不间断的抓取
2010-11-21 11:10 1036转:http://guoyunsky.iteye. ... -
Heritrix源码分析(十三) Heritrix的控制中心(大脑)CrawlController(二)
2010-11-21 11:07 1474http://guoyunsky.iteye.com/b ... -
Heritrix源码分析(十二) Heritrix的控制中心(大脑)CrawlController(一)
2010-11-21 11:05 942http://guoyunsky.iteye.com/ ... -
Heritrix源码分析(十一) Heritrix中的URL--CandidateURI和CrawlURI以及如何增加自己的属性
2010-11-21 11:04 1014http://guoyunsky.iteye.com/b ... -
Heritrix源码分析(十) Heritrix中的Http Status Code(Http状态码)
2010-11-21 11:00 1213http://guoyunsky.iteye.com/bl ... -
Heritrix源码分析(八) Heritrix8个处理器(Processor)介绍
2010-11-21 10:58 947http://guoyunsky.iteye.com/bl ... -
Heritrix源码分析(七) Heritrix总体介绍
2010-11-21 10:57 982http://guoyunsky.iteye.com/bl ... -
Heritrix源码分析(六) Heritrix的文件结构分析
2010-11-21 10:57 1013http://guoyunsky.iteye.com/bl ... -
Heritrix源码分析(五) 如何让Heritrix在Ecplise等IDE下编程启动
2010-11-21 10:56 1255http://guoyunsky.iteye.com/bl ... -
Heritrix源码分析(四) 各个类说明(二)
2010-11-21 10:55 1115http://guoyunsky.iteye.com/ ... -
Heritrix源码分析(四) 各个类说明(一)
2010-11-21 10:54 1000http://guoyunsky.iteye.com/ ... -
Heritrix源码分析(三) 修改配置文件order.xml加快你的抓取速度
2010-11-21 10:53 1253http://guoyunsky.iteye.co ... -
Heritrix源码分析(二) 配置文件order.xml介绍
2010-11-21 10:43 1234http://guoyunsky.iteye.com/ ... -
Heritrix源码分析(一) 包介绍
2010-11-21 10:42 1115http://guoyunsky.iteye.com/blog ...
相关推荐
这个“Heritrix源码”压缩包可能包含了Heritrix项目的完整源代码,以及相关的学习资料,对于深入理解Heritrix的工作原理、定制爬虫功能以及进行二次开发非常有帮助。以下将详细介绍Heritrix的关键知识点。 1. **...
10. `org.archive.crawler.filter`:过滤器组件,根据规则过滤不需要的URL,避免无效或重复的抓取。 11. `org.archive.crawler.framework`:Heritrix的框架包,定义了核心类如CrawlController(爬虫控制器)和...
Heritrix是一款开源的互联网档案爬虫工具,由Internet Archive开发并维护,广泛应用于数据抓取和网络资源保存。Heritrix 1.14.4是该软件的一个较早版本,包含了完整的源码,因此用户可以对其进行深度定制和调试。 ...
**Lucene 和 Heritrix 源码分析** 在IT领域,搜索引擎的开发是一项复杂而重要的任务,它涉及到大量的文本处理、索引构建以及高效的查询算法。Lucene 和 Heritrix 是两个开源工具,分别专注于搜索的核心算法和网页...
这将使Heritrix抓取的页面以镜像形式保存在本地目录,而非生成ARC存档文件。 - 设置属性:在`Settings`页面,有许多预设组件的值可供调整。每个属性旁边都有问号图标,点击后可查看详细解释。 Heritrix的扩展性...
开发者可以深入研究源码,了解其内部工作原理,进行二次开发或调试。源码中的主要目录和文件可能包括以下几个部分: - `src/main/java`: 存放Heritrix的核心Java源代码,包括各个组件的实现。 - `src/main/resources...
Heritrix的核心功能包括URL调度、网页下载、内容解析以及元数据提取。 在"Heritrix 源码和Jar"这个主题中,我们可以深入探讨以下几个知识点: 1. **Heritrix的架构**: Heritrix采用模块化设计,由多个组件构成,...
这个“Heritrix1.14.4源码+项目”压缩包包含的是Heritrix 1.14.4版本的源代码和相关项目文件,对于学习和理解Web爬虫的工作原理,以及进行自定义开发是非常有价值的。 Heritrix的核心功能是通过模拟浏览器行为来...
这个版本的源码和编译后的二进制文件分别以"heritrix-1.14.4.zip"和"heritrix-1.14.4-src.zip"的名义提供,允许用户进行深入研究、学习或二次开发。 在Heritrix中,爬虫的主要工作流程包括种子管理、URL过滤、内容...
### Heritrix源码分析知识点概述 #### 一、Heritrix简介 Heritrix是一款开源的网络爬虫工具,由Internet Archive开发并维护。它主要用于网页归档和大规模网络爬取任务。Heritrix的设计理念是高度可配置性和扩展性,...
如果你打算对Heritrix进行二次开发,或者需要解决特定问题,那么这个源代码包是必不可少的。 此外,还有一个名为“官方下载地址.txt”的文件,它很可能包含了Heritrix的最新版本或其他相关资源的下载链接。确保从...
- **URL管理**:Heritrix使用URL队列来管理待抓取的链接,并且可以设置URL过滤规则,避免重复抓取或不符合条件的URL。 - **内容解析**:Heritrix内置了HTML、XML、PDF等多种格式的解析器,可以解析网页内容并提取出...
例如,你可以使用正则表达式来限定抓取的URL模式,确保只抓取特定类型的文本内容。此外,通过调整`Profiles`中的`max-delay-ms`、`min-delay-ms`、`max-retries`和`retry-delay-seconds`等设置,可以优化爬取速度,...
每个模块都有其特定功能,如种子管理器负责管理起始抓取URL,调度器负责控制爬取速率和优先级。 3. **Heritrix运行与配置**:在`Heritrix1/src/org/archive/crawler/Heritrix.java`文件中启动Heritrix后,服务会在...
《Heritrix抓取指南》 Heritrix是一款强大的网络爬虫工具,广泛应用于数据采集和分析。本指南将详细介绍如何利用Heritrix抓取淘宝商城大家电分类下的空调商品信息。 首先,确定我们的目标:抓取淘宝商城空调商品...
1. **启动与安装**: 首先,你需要下载Heritrix的源码或预编译的二进制包,根据系统环境进行安装。安装完成后,通过命令行启动Heritrix,如在Java环境中使用`java -jar heritrix.jar`。 2. **配置文件结构**: ...
综上所述,"开发自己的搜索引擎lucene+heritrix(第2版)"的源码涵盖了从网络数据抓取到全文检索的全过程,适合开发者深入学习和实践搜索引擎技术。通过研究ch13至ch16的源代码,可以更深入地理解这两个工具的交互和...