最近博主要做一些分析课题,所以使用java爬取了主流的房屋网站,搞些事情,下面是我搞事情的思路,在结尾处我会投放我的源码文件,供大家下载:
导航:
- 设计思路
- 项目的包与类详解
- 部分重要代码展示
- 源码下载
设计思路:
想要爬取房屋的网站,就要有以下几个东西:
- 一个爬取网页的类,方便爬取网页文件
- 一堆能够解析不同单位的类,得到页面后进行解析
- 一个能够保存解析结果到本地的类,最好是excel数据表类型
- 还有一套不要循环爬取,甚至爬取到与本网站无关的其他网页
- 还有一个能够把以上内容都串起来类
项目的包与类详解:
包packet:- analyze包:分析目标网页,并提取内容的包
- excelUtils包:读写excel数据表的包
- fileUtils包:读写文件的包
重要的类:
- Spider类:作为爬虫的主要战场,因为搜房的网站内容大多是静态网页,因此我们完全可以通过jsoup进行网页的信息爬取
- GetDetails类:是一个抽象类,同时是解析不同网页的父类,这里我们通过多态的方式,在Spider中引用父类的方法,把子类对象传递进来,执行子类的方法,这样就可以在不改变源码的情况下随时增加可以解析的网页的种类
- WriteExcel类:我们使用的是maven仓库中的poi来对excel数据表(.xlsx)进行写入操作
部分重要代码展示
SpiderImpl:Spider的接口
package spider;
import analyze.GetDetails;
public interface SpiderImpl {
/*设置顶级域名,防止在爬取过程中爬到外站链接*/
void setTopUrl(String url);
/*设置保存爬取成果的excel的根路径*/
void setSaveRootPath(String saveRootPath);
/*得到url的指定路径*/
String getOnePage(String url);
/*传入解析网页的子类*/
void setGetDetailsClass(GetDetails getDetailsClass);
/*运行爬虫*/
void run();
}
abstract class GetDetails:
package analyze;
public abstract class GetDetails {
/*判断是不是包含房屋信息的那个网页*/
public abstract boolean isTarget(String url);
/*解析网页*/
public abstract String[] analize(String url, String html);
/*在excel中加入一些用户自定义的内容*/
public abstract String[] getSaveBehind();
}
WriteExcel:
package excelUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class WriteExcel {
private String pathname;
private Workbook workbook;
private Sheet sheet1;
public void write(String[] writeStrings, int rowNumber) throws Exception {
//将内容写入指定的行号中
Row row = sheet1.createRow(rowNumber);
//遍历整行中的列序号
for (int j = 0; j < writeStrings.length; j++) {
//根据行指定列坐标j,然后在单元格中写入数据
Cell cell = row.createCell(j);
cell.setCellValue(writeStrings[j]);
}
OutputStream stream = new FileOutputStream(pathname);
workbook.write(stream);
stream.close();
}
public WriteExcel(String excelPath) throws Exception {
//在excelPath中需要指定具体的文件名(需要带上.xls或.xlsx的后缀)
this.pathname = excelPath;
String fileType = excelPath.substring(excelPath.lastIndexOf(".") + 1, excelPath.length());
//创建文档对象
if (fileType.equals("xls")) {
//如果是.xls,就new HSSFWorkbook()
workbook = new HSSFWorkbook();
} else if (fileType.equals("xlsx")) {
//如果是.xlsx,就new XSSFWorkbook()
workbook = new XSSFWorkbook();
} else {
throw new Exception("文档格式后缀不正确!!!");
}
// 创建表sheet
sheet1 = workbook.createSheet("sheet1");
}
}
源码下载:
http://download.csdn.net/download/weixin_35757704/10157312