-
heritrix爬取友人网(http://mobile.younet.com/)信息后遇到的问题15
最近在使用heritrix爬取了http://mobile.younet.com/网站的网站产品页面后,在运行写入main函数的 Extractor后,控制台输出信息与《开发自己的搜索引擎》所给出的效果是一样的,问题是在我所定义的目标目录下并没有相应的txt文档与图片生成,我由于初学实在是解决不出来,贴出我用的两个类Extractor和ExtractYounetMobile希望大家能帮我找找是什么原因了。
我把抓取的mirror和精简的mySearch打包放了上来名字叫mySearchAndData。
# package com.backSearch.extractor;
#
# import java.io.File;
# import java.io.FileInputStream;
# import java.io.FileOutputStream;
# import java.util.regex.Matcher;
# import java.util.regex.Pattern;
#
# import org.htmlparser.Parser;
#
# import com.backSearch.extractor.younet.ExtractYounetMobile;
#
# public abstract class Extractor {
#
# protected static final String NEWLINE = "\r\n";
#
# /**
# * 表示所有结果的输出路径
# */
# private String outputPath = "";
#
# /**
# * 表示当前正在被处理的文件
# */
# private String inputFilePath;
#
# /**
# * 表示当前所有被抓取的网页的镜象根目录 在Heritrix用mirror目录表示
# */
# private String mirrorDir = "";
#
# /**
# * 用于存放被处理过后的产口的图片的目录
# */
# private String imageDir = "";
#
# /**
# * HTMLParser的实例
# */
# private Parser parser;
#
# /**
# * 对图片路径进行哈希的算法,这里采用MD5算法
# */
# protected static final String HASH_ALGORITHM = "md5";
#
# /**
# * 分隔符
# */
# public static final String SEPARATOR = "======================";
#
# /**
# * 装载需要的网页文件
# *
# */
# public void loadFile(String path) {
# try {
# parser = new Parser(path);
# inputFilePath = path;
# parser.setEncoding("GB2312");
# } catch (Exception e) {
# e.printStackTrace();
# }
# }
#
# /**
# * 获取输出的路径
# */
# public String getOutputPath() {
# return outputPath;
# }
#
# /**
# * 设置输出的路径,通常在初始化Extractor时就应该做
# */
# public void setOutputPath(String outputPath) {
# this.outputPath = outputPath;
# }
#
# public Parser getParser() {
# return parser;
# }
#
# /**
# * 使用正则来匹配并获得网页中的字符串
# */
# protected String getProp(String pattern, String match, int index) {
# Pattern sp = Pattern.compile(pattern);
# Matcher matcher = sp.matcher(match);
# while (matcher.find()) {
# return matcher.group(index);
# }
# return null;
# }
#
# /**
# * 抽象方法,用于供子类实现。 其功能主要是解释网页文件 将产品信息保存到
# *
# */
# public abstract void extract();
#
# /**
# * 获取正在处理的文件的路径
# */
# public String getInputFilePath() {
# return inputFilePath;
# }
#
# /**
# * 从mirror目录下拷贝文件至所设定的图片目录
# * 该方法可能需要被改变
# */
# protected boolean copyImage(String image_url, String new_image_file) {
#
# String dirs = image_url.substring(7);
#
# try {
# // instance the File as file_in and file_out
# File file_in = new File(new File(mirrorDir), dirs);
# if (file_in == null || !file_in.exists()) {
# file_in = new File("f:\\sousuo\\noimage.jpg");
# }
#
# File file_out = new File(new File(imageDir), new_image_file);
#
# FileInputStream in1 = new FileInputStream(file_in);
# FileOutputStream out1 = new FileOutputStream(file_out);
#
# byte[] bytes = new byte[1024];
# int c;
# while ((c = in1.read(bytes)) != -1)
# out1.write(bytes, 0, c);
#
# // close
# in1.close();
# out1.close();
# return (true); // if success then return true
# } catch (Exception e) {
# e.printStackTrace();
# return (false); // if fail then return false
# }
# }
#
# public String getImageDir() {
# return imageDir;
# }
#
# public void setImageDir(String imageDir) {
# this.imageDir = imageDir;
# }
#
# public String getMirrorDir() {
# return mirrorDir;
# }
#
# public void setMirrorDir(String mirrorDir) {
# this.mirrorDir = mirrorDir;
# }
#
# public void setInputFilePath(String inputFilePath) {
# this.inputFilePath = inputFilePath;
# }
#
# // public static void main(String[] args) throws Exception {
# //
# // Extractor extractor = new Extract163Moblie();
# // extractor.setOutputPath("c:\\product\\test\\mobile\\");
# // extractor.setImageDir("c:\\product\\test\\image\\");
# // extractor.setMirrorDir("F:\\data \\163手机\\mirror\\");
# //
# // traverse(extractor, new File("F:\\data \\163手机\\mirror\\mobile.163.com\\0011\\product\\0011000B\\product"));
# // System.out.println(count);
# //
# // }
# static int count = 0;
#
# public static void main(String[] args) throws Exception {
#
# Extractor extractor = new ExtractYounetMobile();
# extractor.setOutputPath("F:\\product\\mobile\\");
# extractor.setImageDir("F:\\product\\image\\");
# extractor.setMirrorDir("F:\\YounetMobile-20100514064948846\\mirror\\");
#
# //try {
# //long s = System.currentTimeMillis();
# traverse(extractor, new File("F:\\YounetMobile-20100514064948846\\mirror\\mobile.younet.com\\files\\"));
# //long e = System.currentTimeMillis();
# //System.out.println("1---------------------" + e);
# //System.out.println("2---------------------" + s);
# //System.out.println(" 用时: " + (e - s) / 1000 + " 秒");
# System.out.println("总数" + count);
# // } catch (Exception e) {
# // e.printStackTrace();
# //}
#
# }
#
#
# public static void traverse(Extractor extractor, File path)
# throws Exception {
# if (path == null) {
# return;
# }
#
# if (path.isDirectory()) {
# String[] files = path.list();
# for (int i = 0; i < files.length; i++) {
# traverse(extractor, new File(path, files[i]));
# }
# } else {
# if (path.getAbsolutePath().endsWith(".html")
# && path.getAbsolutePath().indexOf("_") == -1) {
# System.out.println(path);
# count++;
# extractor.loadFile(path.getAbsolutePath());
# extractor.extract();
# }
# }
# }
#
# }
# package com.backSearch.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.backSearch.extractor.Extractor;
# import com.backSearch.util.StringUtils;
#
#
# public class ExtractYounetMobile 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.getInputFilePath().indexOf("mirror") + 6;
# String url_seg = this.getInputFilePath().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("UTF-8");
# attNameParser.setInputHTML(node.toHtml());
# NodeList attNameNodeList = attNameParser.parse(attributeName_filter);
# attName = attNameNodeList.elements().nextNode().toPlainTextString();
#
# attValueParser = new Parser();
# attValueParser.setEncoding("UTF-8");
# 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();
# }
# }
#
# }
# }2010年5月17日 09:26
目前还没有答案
相关推荐
Heritrix是一款强大的网络爬虫工具,用于抓取和归档Web内容。在Heritrix中,SURT(Sort-friendly URI Reordering Transform)和SurtPrefixedDecideRule是两个关键概念,它们对于高效和准确地抓取目标站点的内容至关...
3. 修改C:/heritrix/conf/heritrix.properties文件。这里有两个关键配置:`heritrix.cmdline.admin = admin:770629`(用户名和密码)和`heritrix.cmdline.port = 8080`(Heritrix服务的默认端口号,如果8080端口未被...
heritrix.cmdline.admin = admin:admin heritrix.cmdline.port = 8080 ``` - 编辑`jmxremote.password.template`文件,将其中的模板文本替换为实际密码: ```properties monitorRole admin controlRole ...
3. **Heritrix运行与配置**:在`Heritrix1/src/org/archive/crawler/Heritrix.java`文件中启动Heritrix后,服务会在本地的8089端口监听。通过访问`https://localhost:8089`,我们可以使用内置的Web管理界面进行配置...
heritrix1.14.4的源码包,包含heritrix1.14.4.zip和heritrix1.14.4-src.zip。heritrix是一种开源的网络爬虫,用于爬去互联网中的网页。如何配置和使用heritrix爬虫,请移步:...
去下载这个吧。(完整版的) http://d.download.csdn.net/down/1756566/caizhongda Lucene2.0+Heritrix搜索引擎(完整光盘).part2.rar
- 修改`heritrix.properties`中的相关配置,如`heritrix.cmdline.admin`。 - 运行Heritrix应用并验证功能。 #### 三、Heritrix工作原理 Heritrix的工作原理基于深度优先搜索算法,其核心流程包括: 1. **爬取任务...
`heritrix.cmdline.port=9090`则指定了Heritrix Web界面的监听端口。 ### 五、Heritrix Web界面访问 Heritrix提供了一个基于Web的用户界面,通过浏览器访问`http://127.0.0.1:9090/index.jsp`即可登录。这里使用的...
注:随光盘附带的mirror.rar文件是使用Heritrix从pconline网上抓取的手机信息页面(以网站镜象格式存储),在本书最后搜索引擎完整实例中需要使用到。由于光盘容量有限,笔者删除了原始镜像目录中一部分的网页,可能...
别下这个哈。。去下载这个吧。(完整版的) http://d.download.csdn.net/down/1756566/caizhongda
Heritrix是IA的开放源代码,可扩展的,基于整个Web的,归档网络爬虫工程 Heritrix工程始于2003年初,IA的目的是开发一个特殊的爬虫,对网上的 资源进行归档,建立网络数字图书馆,在过去的6年里,IA已经建立了400...
"Myeclipse下安装说明及常见问题.txt" 文件提供了在MyEclipse集成开发环境中安装和运行Heritrix的步骤和可能遇到的问题的解决方案。MyEclipse是一种强大的Java EE集成开发环境,对Java项目的支持非常全面,因此它是...
注:随光盘附带的mirror.rar文件是使用Heritrix从pconline网上抓取的手机信息页面(以网站镜象格式存储),在本书最后搜索引擎完整实例中需要使用到。由于光盘容量有限,笔者删除了原始镜像目录中一部分的网页,可能...
在配置阶段,你需要修改 heritrix/conf/heritrix.properties 文件。找到 "heritrix.cmdline.admin=" 行,将其改为 "heritrix.cmdline.admin=admin:admin",这会设置默认的管理员账号和密码。 最后,你需要运行项目...
注:随光盘附带的mirror.rar文件是使用Heritrix从pconline网上抓取的手机信息页面(以网站镜象格式存储),在本书最后搜索引擎完整实例中需要使用到。由于光盘容量有限,笔者删除了原始镜像目录中一部分的网页,可能...