使用Heritrix进行主题抓取
来源:互联网 发布:edius6软件下载 编辑:程序博客网 时间:2024/06/11 06:50
一、配置Heritrix项目
1.下载heritrix编译后的字节码包与源码包
heritrix-1.14.4.zip
heritrix-1.14.4-src.zip
注:以下文件未强调时均为源码包中的文件。2.创建Java Project项目
3.复制src/java目录下的com、org、st包到项目的src下
4.将lib文件夹复制到项目根目录下,并将所有jar添加到Bulid Path
5.右键项目Properties
->Java Compiler
->Errors/Warnings
->Configure WorkPlace Settings
->Deprecated and restricted API 把error修改为warning6.复制conf到根目录下 修改heritrix.properties中以下两项
heritrix.version = @VERSION@为heritrix.version = 1.14.4
heritrix.cmdline.admin = admin:admin (即登录账号与密码均为admin)
7.复制webapps到根目录下,复制字节码包下webapps的admin.war到webapps
8.复制src\resources\org\archive\util中的tlds-alpha-by-domain.txt到org.archive.util包
9.添加conf:
->run configurations
->classpath(此时注意项目名称是否为你选择的项目名,若不是则手动选择)->Advanced
->Add Folders->选择项目下的conf文件夹
->Run
控制台输出如下:
10.访问127.0.0.1:8080并登录(默认情况下是8080端口)
11.创建任务Jobs
->With defaults 输入job名、描述、url地址(如http://www.chzu.edu.cn)
->选择Modules
->Select Writers Processors选择org.archive.crawler.writer.MirrorWriterProcessor并Add
->选择Setting
->user-agent:修改版本号、from处填写符合邮箱格式的邮箱地址
->提交作业Submit job
->Console
->Start
->Refresh
如下:
抓取结果存储在项目根目录下的jobs文件夹中:
可以看出结果中存在一些与chzu.edu.cn不相关的网站数据,下面我们对其进行简单过滤。
二、主题抓取
1 . 使用FrontierScheduler类过滤抓取的域名
在org.archive.crawler.postprocessor包中创建MyFrontierScheduler类,继承FrontierScheduler,并重写protected void schedule(CandidateURI caUri)方法,以下我们过滤域名中存在"chzu.edu.cn"的网站。
package org.archive.crawler.postprocessor;import org.archive.crawler.datamodel.CandidateURI;public class MyFrontierScheduler extends FrontierScheduler {private static final long serialVersionUID = -1074778906898000967L;public MyFrontierScheduler(String name) {super(name);}protected void schedule(CandidateURI caUri) {//过滤URIif(caUri.toString().contains("chzu.edu.cn")){getController().getFrontier().schedule(caUri);} }}在配置文件conf\modules\Processor.options中配置MyFrontierScheduler类
在job中选择自定义的FrontierScheduler如下
2 . 使用Extractor抽象类过滤url
编写继承org.archive.crawler.Extractor的子类实现其抽象方法,以下以抓取滁州学院信息学院官网为例。
package org.archive.crawler.extractor;import java.io.IOException;import java.util.regex.Matcher;import java.util.regex.Pattern;import org.archive.crawler.datamodel.CrawlURI;import org.archive.io.ReplayCharSequence;import org.archive.util.HttpRecorder;public class ExtractorChzu extends Extractor {private static final long serialVersionUID = 8082386142013745017L;public ExtractorChzu(String name, String description) {super(name, description);}public ExtractorChzu(String name) {super(name, "CSCI");}//匹配a标签中的有效链接//<a href='/s/15/t/199/e0/e4/info123108.htm' target=_blank title="xxxxxxx">private static final String A_HREF="<a(.*)href\\s*=\\s*(\'/\\w/\\d+/\\w/\\d+/\\w+/\\w+/info\\d+.htm\')(.*)>";private static final String DOMAIN="http://csci.chzu.edu.cn";@Overrideprotected void extract(CrawlURI curi) {String url ="";try {HttpRecorder hr = curi.getHttpRecorder();if(hr==null){throw new IOException("HttpRecorder IOException");}ReplayCharSequence rc= hr.getReplayCharSequence();if(rc==null){return;}String content = rc.toString();Pattern pattern = Pattern.compile(A_HREF, Pattern.CASE_INSENSITIVE);Matcher matcher = pattern.matcher(content);while(matcher.find()){url = matcher.group(2).replaceAll("'", "");curi.createAndAddLinkRelativeToBase(DOMAIN+url, content, Link.NAVLINK_HOP);}} catch (Exception e) {e.printStackTrace();}}}
在配置文件中配置
在job配置页面选择
三、错误解决
运行时报错:
ERROR: '无法编译样式表'
FATAL ERROR: 'java.net.MalformedURLException'
:null
2016-08-10 23:39:11.870 严重 thread-40 org.archive.crawler.framework.WriterPoolProcessor.getFirstrecordBody() Failed transform javax.xml.transform.TransformerConfigurationException: java.net.MalformedURLException
2016-08-10 23:39:11.878 严重 thread-40 org.archive.io.arc.ARCWriter.getMetadataLength() Unsupported metadata type: null
解决:
heritrix里面的arcMetaheaderBody.xsl文件就copy到Eclipse 工程src目录下运行下即可
运行时报错:
Heritrix version: 1.14.4
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/cli/UnrecognizedOptionException
at org.archive.crawler.Heritrix.doCmdLineArgs(Heritrix.java:607)
at org.archive.crawler.Heritrix.main(Heritrix.java:556)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.cli.UnrecognizedOptionException
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 2 more
解决:
在Run Configurations中的Classpath下单击Restore Default Entries,重新选择conf文件夹运行。
- 使用Heritrix进行主题抓取
- Heritrix 的主题抓取策略
- 使用heritrix抓取特定页面
- Heritrix抓取
- 使用Heritrix-1.12.1新建抓取任务
- 使用Heritrix-1.12.1新建抓取任务
- Heritrix的多线程抓取
- Heritrix控制抓取速度
- heritrix 提高抓取速度
- Heritrix 抓取 高级篇
- heritrix抓取网页!
- heritrix使用
- 基于Heritrix的增量抓取
- 基于Heritrix的增量抓取
- heritrix安装配置和抓取
- heritrix 3.1.1并行抓取
- heritrix 抓取指定的html
- 使用scrapy进行大规模抓取
- UVa 1586 Molar Mass(分子量)
- 小甲鱼PE详解之IMAGE_NT_HEADERS结构定义即各个属性的作用(PE详解02)
- n个字符串按照字典序排列
- 句柄与指针的区别与联系
- 小火山的宝藏收益
- 使用Heritrix进行主题抓取
- 正确的mysql5.6.24中my.ini配置文件
- 【NOIP2013】火柴排队
- 华为OJ——删除字符串中出现次数最少的字符
- 自定义View——Path的基本用法
- kali 更新源,亲测好用
- 如何查询数据库中表的字段名?
- Cnskype完备的统一沟通能力
- Android手机号码正则表达式