`

lucene2.0+heritrix示例补充

阅读更多

  由于lucene2.0+heritrix一书示例用的网站(http://mobile.pconline.com.cn/,http: //mobile.163.com/)改版了,书上实例不能运行,我又找了一个http://mobile.younet.com/进行开发并成功实现示例,希望感兴趣的同学,近快实践,如果此网站也改了就又得改extractor了,哈哈!
search的Extractor代码如下,(别和书上实例相同)供大家参考:附件里有完整代码

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->package com.luceneheritrixbook.extractor.younet;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Date;

import org.htmlparser.Node;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.filters.AndFilter;
import org.htmlparser.filters.HasAttributeFilter;
import org.htmlparser.filters.HasChildFilter;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.tags.ImageTag;
import org.htmlparser.util.NodeIterator;
import org.htmlparser.util.NodeList;

import com.luceneheritrixbook.extractor.Extractor;
import com.luceneheritrixbook.util.StringUtils;

/**
 * <p></p>
 * 
@author cnyqiao@hotmail.com
 * @date   Feb 6, 2009 
 
*/

public class ExtractYounetMoblie extends Extractor {

    @Override
    
public void extract() {
        BufferedWriter bw 
= null;
        NodeFilter title_filter 
= new AndFilter(new TagNameFilter("div"), new HasAttributeFilter("class""mo_tit"));
        NodeFilter attribute_filter 
= new AndFilter(new TagNameFilter("p"), new HasChildFilter(new AndFilter(new TagNameFilter("span"), new HasAttributeFilter("class""gn_sp1 blue1"))));
        NodeFilter img_filter 
= new AndFilter(new TagNameFilter("span"), new HasChildFilter(new TagNameFilter("img")));
        
        
//提取标题信息
        try {
            
//Parser根据过滤器返回所有满足过滤条件的节点
            
// 迭代逐渐查找
            NodeList nodeList=this.getParser().parse(title_filter);
            NodeIterator it 
= nodeList.elements();
            StringBuffer title 
= new StringBuffer();
            
while (it.hasMoreNodes()) {
                Node node 
= (Node) it.nextNode();
                String[] names 
= node.toPlainTextString().split(" ");
                
for(int i = 0; i < names.length; i++)
                    title.append(names[i]).append(
"-");
                title.append(
new Date().getTime());
                
//创建要生成的文件
                bw = new BufferedWriter(new FileWriter(new File(this.getOutputPath() + title + ".txt")));
                
//获取当前提取页的完整URL地址
                int startPos = this.getInuputFilePath().indexOf("mirror"+ 6;
                String url_seg 
= this.getInuputFilePath().substring(startPos);
                url_seg 
= url_seg.replaceAll("\\\\""/");
                String url 
= "http:/" + url_seg;
                
//写入当前提取页的完整URL地址
                bw.write(url + NEWLINE);
                bw.write(names[
0+ NEWLINE);
                bw.write(names[
1+ NEWLINE);
                
            }
            
// 重置Parser
            this.getParser().reset();
            Parser attNameParser 
= null;
            Parser attValueParser 
= null;
            
//Parser parser=new Parser("http://www.sina.com.cn");
            NodeFilter attributeName_filter = new AndFilter(new TagNameFilter("span"), new HasAttributeFilter("class""gn_sp1 blue1"));
            NodeFilter attributeValue_filter 
= new AndFilter(new TagNameFilter("span"), new HasAttributeFilter("class""gn_sp2"));
            String attName 
= "";
            String attValue 
= "";
            
// 迭代逐渐查找
            nodeList=this.getParser().parse(attribute_filter);
            it 
= nodeList.elements();
            
while (it.hasMoreNodes()) {                
                Node node 
= (Node) it.nextNode();
                attNameParser 
= new Parser();
                attNameParser.setEncoding(
"GB2312");
                attNameParser.setInputHTML(node.toHtml());
                NodeList attNameNodeList 
= attNameParser.parse(attributeName_filter);
                attName 
= attNameNodeList.elements().nextNode().toPlainTextString();
                
                attValueParser 
= new Parser();
                attValueParser.setEncoding(
"GB2312");
                attValueParser.setInputHTML(node.toHtml());
                NodeList attValueNodeList 
= attValueParser.parse(attributeValue_filter);
                attValue 
= attValueNodeList.elements().nextNode().toPlainTextString();
                bw.write(attName.trim() 
+ attValue.trim());
                bw.newLine();
            }
            
// 重置Parser
            this.getParser().reset();
            String imgUrl 
= "";
            String fileType 
="";
            
// 迭代逐渐查找
            nodeList=this.getParser().parse(img_filter);
            it 
= nodeList.elements();
            
while (it.hasMoreNodes()) {                
                Node node 
= (Node) it.nextNode();
                
                ImageTag imgNode 
= (ImageTag)node.getChildren().elements().nextNode();
                imgUrl 
= imgNode.getAttribute("src");                
                fileType 
= imgUrl.trim().substring(imgUrl
                        .lastIndexOf(
"."+ 1);
                
//生成新的图片的文件名
                String new_iamge_file = StringUtils.encodePassword(imgUrl, HASH_ALGORITHM) + "." + fileType;
                
//imgUrl = new HtmlPaserFilterTest().replace(new_iamge_file, "+", " ");
                
//利用miorr目录下的图片生成的新的图片
                this.copyImage(imgUrl, new_iamge_file);
                bw.write(SEPARATOR 
+ NEWLINE);
                bw.write(new_iamge_file 
+ NEWLINE);
            }
            
            
        } 
catch(Exception e) {
            e.printStackTrace();
        } 
finally {
            
try{
                
if (bw != null)
                    bw.close();
            }
catch(IOException e){
                e.printStackTrace();
            }
        }
        
    }
}

运行书上的heritrix实例,并按书上的默认设置进行抓取如下URI:(请自己分析整理)

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->http://mobile.younet.com/files/list_1.html
http://mobile.younet.com/files/list_2.html
http://mobile.younet.com/files/list_3.html
分享到:
评论

相关推荐

    开发自己的搜索引擎《lucene2.0+heritrix》一书对应的源码资料

    这里我们关注的是基于开源项目Lucene 2.0和Heritrix的一本书——《开发自己的搜索引擎》的源码资料。Lucene是一个高性能、全文本搜索库,而Heritrix则是一个强大的网页抓取工具,它们共同构成了搜索引擎的基础架构。...

    Lucene2.0+Heritrix(源代码)

    《构建搜索引擎:剖析Lucene2.0与Heritrix源代码》 在信息化时代,搜索引擎已经成为我们日常获取信息的重要工具。本章节将深入探讨如何利用Lucene2.0和Heritrix这两个开源项目构建一个基本的搜索引擎。首先,我们要...

    lucene2.0+Heritrix配套源码

    《lucene2.0+Heritrix配套源码》是一个针对搜索引擎开发的资源包,包含了构建自定义搜索引擎所需的关键组件。Lucene是一个流行的全文搜索引擎库,而Heritrix则是一个强大的网页抓取工具,用于收集互联网上的数据。这...

    lucene2.0+heritrix 随书光盘

    《lucene2.0+heritrix 随书光盘》是针对搜索引擎技术的一个资源集合,其中包含了Lucene 2.0和Heritrix的相关示例及教程。Lucene是一款强大的全文检索库,而Heritrix则是一个互联网爬虫工具,它们在构建搜索引擎时起...

    Lucene2.0+Heritrix搜索引擎 随书光盘

    《Lucene2.0+Heritrix搜索引擎》随书光盘包含了两个重要的开源搜索技术——Apache Lucene 2.0和Heritrix的资源和教程。Lucene是Java开发的全文检索库,而Heritrix则是一个网络爬虫工具,它们在构建大规模搜索引擎和...

    【完整光盘24.5M】开发自己的搜索引擎-Lucene 2.0+Heritrix.zip

    《构建个人搜索引擎:深入理解Lucene 2.0与Heritrix》 在这个数字化时代,搜索引擎已经成为我们获取信息的关键工具。对于IT专业人士来说,了解并掌握搜索引擎的内部工作原理及开发技术,不仅可以提升自身技能,还能...

    Lucene 2.0+Heriterx书源代码-ch7lib

    压缩包中的"lib"文件夹包含了运行Lucene 2.0和Heritrix相关示例代码所需的依赖库。这些jar包可能包括: 1. Lucene的核心库:如lucene-core.jar,包含了Lucene的基本类和接口,如Document、Field、Analyzer和...

    开发自己的搜索引擎--Lucene 2.0+Heritrix(爬虫)

    本章节将深入探讨如何利用Lucene 2.0和Heritrix来开发自己的搜索引擎。 Lucene是Apache软件基金会的一个开放源代码项目,它是一个全文检索库,提供了强大的文本搜索功能。在Lucene 2.0版本中,它已经相当成熟,支持...

    Lucene2.0+Heritrix搜索引擎(完整光盘).part2.rar

    去下载这个吧。(完整版的) http://d.download.csdn.net/down/1756566/caizhongda Lucene2.0+Heritrix搜索引擎(完整光盘).part2.rar

    Lucene2.0+Heritrix(ch3源代码)

    《深入理解Lucene 2.0与Heritrix:源码剖析及应用实践》 Lucene是一个开源全文搜索引擎库,由Apache软件基金会开发并维护。它提供了高效的、可扩展的文本搜索功能,允许开发者在自己的应用程序中嵌入全文检索功能。...

    Lucene2.0+Heritrix(ch4源代码)

    《深入理解Lucene 2.0与Heritrix:源码剖析及应用实践》 Lucene是一个开源全文搜索引擎库,由Apache软件基金会开发并维护。它提供了高效的索引和搜索功能,广泛应用于各种信息检索系统。Heritrix是互联网档案馆...

    Lucene2.0+Nutch0.8 API帮助文档(CHM格式)

    《Lucene2.0+Nutch0.8 API帮助文档》是一个综合性的技术资源,它包含了对Lucene 2.0和Nutch 0.8这两个关键的开源搜索引擎库的详细接口和功能说明。这两个组件在信息检索、全文搜索以及网络爬虫领域有着广泛的应用。 ...

    Lucene 2.0+Heritrix源码【2】

    在Lucene 2.0版本中,引入了更多的改进和优化,例如对多线程的支持增强,提高了索引和搜索的效率,以及对新特性的添加,如n-gram分析器,使得短语搜索更为精确。 Heritrix,另一方面,是互联网档案馆开发的一款开放...

    开发自己的搜索引擎-Lucene 2.0+Heritrix

    在这个过程中,两个关键的开源工具——Lucene和Heritrix——扮演着重要的角色。本资源主要关注如何利用这两者来开发自己的搜索引擎。 首先,让我们深入了解Lucene。Lucene是Apache软件基金会的一个项目,它是一个...

    Lucene2.0+Heritrix搜索引擎(完整光盘) 重新发.rar.part1

    别下这个哈。。去下载这个吧。(完整版的) http://d.download.csdn.net/down/1756566/caizhongda

    搜索引擎Lucene+Heritrix(第二版)4

    《搜索引擎Lucene+Heritrix(第二版)4》是一本深入探讨搜索引擎技术的专业书籍,主要围绕两个核心组件——Lucene和Heritrix展开。Lucene是Apache软件基金会的一个开源全文检索库,而Heritrix则是一个网络爬虫工具,...

    开发自己的搜索引擎——Lucene+Heritrix

    虽然提供的资源中没有代码,但通过学习《开发自己的搜索引擎——Lucene+Heritrix》这本书,开发者可以了解到构建搜索引擎的基本流程和技术细节,再通过其他途径获取代码示例,实现在实际项目中的应用。

    开发自己的搜索引擎-Lucene 2.0+Heritrix源码(2)

    讲一个简单搜索引擎的实现,深入浅出,很容易理解

Global site tag (gtag.js) - Google Analytics