资源简介

用jsoup实现爬取一个完整的网站,包含网站里的所有链接内容,会另存为html到本地,js和css文件也会保存到本地,可以直接在本地打开查看一个完整的网站。 eclipse项目,可以直接导入修改。 提供一个链接和保存爬取后的网页保存位置即可。

资源截图

代码片段和文件信息

package com.crawl;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements; 

import com.crawl.util.FileUtils;

public class CrawlWebSite {
 
private final static String charSet = “utf-8“;
private final static String rootDir = “C:/crawlWebSite/“;
//private final static String rootUrl = “http://www.inmarsat.com/“;
private final static String rootUrl = “http://www.jhcomn.com/“;

private final static int timeOut = 30000;

/**网站上相对地址与绝对地址的映射*/
private static Map absRelativeUrlMap = new HashMap();
/**网站上的url与最终本地使用的url映射*/
private static Map urlmapMap = new HashMap();
/**网站上的cssjs*/
private static Map cssjsmapMap = new HashMap();
private static List allFiles = new ArrayList();
/**过滤掉不爬取的内容格式*/
public static final String filterExtArray []  = {“rar““zip““bmp““dib““gif““jfif““jpe““jpeg““jpg““png““tif““tiff““ico““pdf““doc““docx““xls““xlsx“}; 
/**
 * @param args
 * @throws IOException 
 */
public static void main(String[] args)  {

System.out.println(“start....“);

//获取所有urls
getSubUrls(rootUrlrootUrl);
 
//test 
//absRelativeUrlMap.put(“http://www.inmarsat.com/?p=3999“ “http://www.inmarsat.com/?p=3999“);

//保存文件
for(String absUrl : absRelativeUrlMap.keySet()){

String content;
try {
content = readContent(absUrl);
} catch (IOException e) {
System.err.println(“url=“+absUrl+“ 页面无效!“);
continue;
}
if(!absUrl.startsWith(rootUrl)){
continue;
}
String filePath = absUrl.substring(rootUrl.length());
filePath = FileUtils.parseFilePath(filePath);
 
//urlmapMap.put(absRelativeUrlMap.get(absUrl) filePath);//脱机运行和在服务器运行有所不同。。。
urlmapMap.put(absRelativeUrlMap.get(absUrl) rootDir.concat(filePath));//脱机运行。。。
FileUtils.writeFile(content rootDir.concat(filePath)charSet);
}
  
System.out.println(“--------------------“); 
//更新文件中的url
getAllFiles(new File(rootDir)); 
Document doc = null;
for(File file : allFiles){
try {
doc = Jsoup.parse(file “utf8“rootUrl);
dealCssJsFile(doc);
replaceUrl(doc);
} catch (Exception e) { 
e.printStackTrace();
}  
String newContent = doc.html();
FileUtils.writeFile(newContent file.getAbsolutePath()charSet);
}

System.out.println(“finished.“);

 
}


/**
 * 获取指定url页面中的所有链接
 * @param url
 * @return
 * @throws IOException 
 */
public static void getSubUrls(String absUrlString relativeUrl)   {
// TODO Auto-generated method stub
  
if(absRelativeUrlMap.get(absUrl)!=null || filter(absUrl)){
retu

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        360  2014-03-04 20:30  crawl-website\.classpath

     文件        389  2014-03-04 20:01  crawl-website\.project

     文件        629  2014-03-04 20:01  crawl-website\.settings\org.eclipse.jdt.core.prefs

     文件     278273  2013-06-05 09:45  crawl-website\lib\jsoup-1.7.1.jar

     文件       9347  2014-03-05 20:22  crawl-website\src\com\crawl\CrawlWebSite.java

     文件       5574  2014-03-05 20:20  crawl-website\src\com\crawl\util\FileUtils.java

     文件       1150  2014-03-05 13:36  crawl-website\src\com\crawl\util\StringUtil.java

     目录          0  2014-03-05 13:36  crawl-website\src\com\crawl\util

     目录          0  2014-03-05 20:35  crawl-website\src\com\crawl

     目录          0  2014-03-04 20:02  crawl-website\src\com

     目录          0  2014-03-04 20:01  crawl-website\.settings

     目录          0  2014-03-04 20:30  crawl-website\lib

     目录          0  2014-03-04 20:02  crawl-website\src

     目录          0  2014-03-05 20:36  crawl-website

----------- ---------  ---------- -----  ----

               295722                    14


评论

共有 条评论