很多业务需要下载整站页面(有时为多个站点),将页面按照网站拓扑结构存放。
下面给出用JAVA爬虫WebCollector(2.09版本以上)爬取整站网页并按照网页拓扑结构存储到本地的代码。
代码中的抽取器可以作为一个插件复用。
WebCollector的jar包可到官网下载:WebCollector官网。进入官网后下载webcollector-版本号-bin.zip,解压得到所需jar包。
import cn.edu.hfut.dmic.webcollector.crawler.MultiExtractorCrawler; import cn.edu.hfut.dmic.webcollector.extract.Extractor; import cn.edu.hfut.dmic.webcollector.extract.ExtractorParams; import cn.edu.hfut.dmic.webcollector.model.Page; import cn.edu.hfut.dmic.webcollector.util.FileSystemOutput; import cn.edu.hfut.dmic.webcollector.util.FileUtils; import java.io.File; /** * Created by hu on 2015/6/25. */ public class HtmlExtractor extends Extractor{ FileSystemOutput fsOutput; public HtmlExtractor(Page page, ExtractorParams params) { super(page, params); /*每次抽取都会实例化一个Extractor对象,为了让所有Extractor对象共享一个FileSystemOutput对象, 在外部实例化一个FileSystemOutput对象fsOutput,以参数形式传给每个Extractor对象,这里是获取 外部传入的FileSystemOutput对象*/ fsOutput= (FileSystemOutput) params.get("fsOutput"); } @Override public boolean shouldExecute() { //我们希望对所有网页执行此抽取器 return true; } @Override public void extract() throws Exception { //本程序不需要进行网页抽取,所以extract()方法中不需要插入代码 } @Override public void output() throws Exception { fsOutput.output(page); } public static void main(String[] args) throws Exception { /*如果下载文件夹存在,先删除文件夹*/ File downloadDir=new File("download"); if(downloadDir.exists()){ FileUtils.deleteDir(downloadDir); } FileSystemOutput fsOutput=new FileSystemOutput("download"); MultiExtractorCrawler crawler=new MultiExtractorCrawler("crawl",true); crawler.addSeed("http://36kr.com/"); crawler.addRegex("http://36kr.com/.*"); crawler.addExtractor(".*", HtmlExtractor.class, new ExtractorParams("fsOutput",fsOutput)); crawler.start(100); } }
程序执行后可到download文件夹中查看保存的网页:
时间: 2024-11-09 17:16:23