文章目录
使用Jsoup爬取网站的信息
先说下需求吧,又到了金三银四的时节,很多人都在忙碌的找工作,那么我将做一个对boss直聘的网站信息爬取的一个定时任务系统,该系统爬取当天最新发布的java工作、地点北京。并将爬取的内容生成Excel文件,发送至我的邮箱。
核心代码介绍
Jsoup爬取网页相关
- 添加依赖
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.10.3</version>
</dependency>
- 首先获取Document对象,其实就是获取整个页面的大对象
Document document = Jsoup.connect(url).get();
- 然后根据document获取元素,遍历元素得到每个元素的属性、内容。
其中getElementsByClass是获取元素的一种另外还有
getElementsByID
getElementsByTag等等。
Elements elements = document.getElementsByClass("job-primary");
for (Element e : elements) {
EmployMessage employMessage = new EmployMessage();
String jobName = e.getElementsByClass("job-title").text();
employMessage.setJobName(e.getElementsByClass("job-title").text());
...
}
生成Excel相关
- 添加依赖
<!-- 生成excel表用jar包 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.14</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.14</version>
</dependency>
<dependency>
- 生成Excel代码
大致步骤:
- 打开流
- 声明一个工作簿
- 创建一个sheet页
- 创建一个样式
- 生成列
- 生成行对象并赋值
- 创建文件
- 关闭流
private File createExcel(List<EmployMessage> list) throws Exception{
File file = null;
FileOutputStream fos =null;
HSSFWorkbook wb =null;
try{
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String date = sdf.format(new Date());
//声明一个工作薄:包括构建工作簿、表格、样式
wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet(date);
sheet.setDefaultColumnWidth((short) 15);
// 生成一个样式
HSSFCellStyle style = wb.createCellStyle();
HSSFCellStyle style1 = wb.createCellStyle();
HSSFFont hlink_font = wb.createFont();
hlink_font.setUnderline(HSSFFont.U_SINGLE);
hlink_font.setColor(HSSFColor.BLUE.index);
style1.setFont(hlink_font);
style1.setAlignment(HSSFCellStyle.ALIGN_CENTER);
sheet.setColumnWidth(0, 2600);
sheet.setColumnWidth(1, 2600*2);
sheet.setColumnWidth(2, 2600*2);
sheet.setColumnWidth(3, 2600*2);
sheet.setColumnWidth(4, 2600*2);
sheet.setColumnWidth(5, 2600);
sheet.setColumnWidth(6, 2600);
sheet.setColumnWidth(7, 2600*2);
sheet.setColumnWidth(8, 2600*2);
sheet.setColumnWidth(9, 2600*2);
sheet.setColumnWidth(10, 2600*2);
sheet.setColumnWidth(11, 2600*6);
sheet.setColumnWidth(12, 2600*6);
HSSFCell cell = null;
for (int i = 0; i <= list.size(); i++) {
HSSFRow row = sheet.createRow(i);
String no = null;
String jobName;