java简单实现爬虫、jsoup实现网页抓取、POI实现数据导出Excel

概要:

     使用java实现爬虫,并且把数据保存到excel表中格式化保存;目标网站如下,爬取该网站的农产品价格!!!!

java简单实现爬虫、jsoup实现网页抓取、POI实现数据导出Excel_第1张图片

一、知识准备

jsoup:

jsoup 是一款 Java HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOMCSS 以及类似于 jQuery 的操作方法来取出和操作数据。

jsoup官网:http://jsoup.org

目前最新版本:jsoup-1.10.2.jar

 jsoup 的主要功能如下:

 1. 从一个 URL,文件或字符串中解析 HTML

2. 使用 DOM CSS 选择器来查找、取出数据;

3. 可操作 HTML 元素、属性、文本;

POI:

POI全称 Poor Obfuscation Implementation,利用POI接口可以通过JAVA操作Microsoft office 套件工具的读写功能。官网:http://poi.apache.org POI支持office的所有版本。

二、maven工程的依赖jar准备

	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	4.0.0
	com.dark
	reptile
	0.0.1-SNAPSHOT
	
	
	  
		
			org.apache.httpcomponents
			httpclient
			4.5.3
		
		
			org.apache.httpcomponents
			httpmime
			4.5.3
		


		
			org.jsoup
			jsoup
			1.10.2
		


   
       
		
			org.apache.poi
			poi
			3.16
		
		
			org.apache.poi
			poi-ooxml-schemas
			3.16
		
		
			org.apache.poi
			poi-excelant
			3.16
		
		
			org.apache.poi
			poi-examples
			3.16
		
	


三、代码实现

3.1、创建product对象实现,数据的接收和过渡;

package com.dark.pojo;
/**  作者:darkjazz 
*    日期:2018年3月22日 下午7:32:03
*/
public class Product {
     private String productName;
     private String lowerPrice;
     private String averagePrice;
     private String maxPrice;
     //规格
     private String specs;
     //单位
     private String unit;
     //发布日期
     private String date;

	@Override
	public String toString() {
		return "Product [productName=" + productName + ", lowerPrice=" + lowerPrice + ", averagePrice=" + averagePrice
				+ ", maxPrice=" + maxPrice + ", specs=" + specs + ", unit=" + unit + ", date=" + date + "]";
	}

	public String getProductName() {
		return productName;
	}

	public void setProductName(String productName) {
		this.productName = productName;
	}

	public String getLowerPrice() {
		return lowerPrice;
	}

	public void setLowerPrice(String lowerPrice) {
		this.lowerPrice = lowerPrice;
	}

	public String getAveragePrice() {
		return averagePrice;
	}

	public void setAveragePrice(String averagePrice) {
		this.averagePrice = averagePrice;
	}

	public String getMaxPrice() {
		return maxPrice;
	}

	public void setMaxPrice(String maxPrice) {
		this.maxPrice = maxPrice;
	}

	public String getSpecs() {
		return specs;
	}

	public void setSpecs(String specs) {
		this.specs = specs;
	}

	public String getUnit() {
		return unit;
	}

	public void setUnit(String unit) {
		this.unit = unit;
	}

	public String getDate() {
		return date;
	}

	public void setDate(String date) {
		this.date = date;
	}
	
}

3.2、使用poi的excel操作的方法,把下一步爬取到的数据保存到本地硬盘的excel表中

package com.dark.util;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import com.dark.pojo.Product;

/**  作者:darkjazz
*    日期:2018年3月22日 下午8:00:33
*/
public class POItoExcel {
     public static void main(String[] args) {
		
	}
	public static void toExcel(List list) throws FileNotFoundException, IOException{
		 
        //新建文档   
        XSSFWorkbook workBook=new XSSFWorkbook();
        
        //创建表
        XSSFSheet sheet=workBook.createSheet();
        
           //合并标的标题
      		CellRangeAddress cra=new CellRangeAddress(0,1, 0, 6);
      		sheet.addMergedRegion(cra);
      		//显示的文本为左上角的内容
      		Row row2=sheet.createRow(0);
      		Cell cell=row2.createCell(0);
      		cell.setCellValue("商品价格表");
      		//设置单元格的格式
      		CellStyle cs=workBook.createCellStyle();
      		cs.setAlignment(HorizontalAlignment.CENTER);
      		cs.setVerticalAlignment(VerticalAlignment.CENTER);
      		cs.setFillBackgroundColor((short) 59);
      	        cell.setCellStyle(cs);
      		//表头
      		Row row=sheet.createRow(2);
      		
      		Cell cell11=row.createCell(0);
      		cell11.setCellValue("品名");
      		Cell cell22=row.createCell(1);
      		cell22.setCellValue("最低价");
      		Cell cell33=row.createCell(2);
      		cell33.setCellValue("平均价");
      		Cell cell44=row.createCell(3);
      		cell44.setCellValue("最高价");
      		Cell cell55=row.createCell(4);
      		cell55.setCellValue("规格");
      		Cell cell66=row.createCell(5);
      		cell66.setCellValue("单位");
      		Cell cell77=row.createCell(6);
      		cell77.setCellValue("发布日期");
      	    //表中的数据

        for(int i=0;i

3.3、主方法,使用jsout实现爬虫,并调用3.2中的方法实现写入文件

package com.dark.reptile;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

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

import com.dark.pojo.Product;
import com.dark.util.POItoExcel;

/**  作者:darkjazz 
*    日期:2018年3月22日 下午7:11:20
*/
public class Reptile {
       public static void main(String[] args) throws FileNotFoundException, IOException {
    	   List list=getInfor("http://www.xinfadi.com.cn/marketanalysis/1/list/1.shtml", 1000);
    	   POItoExcel.toExcel(list);
	}
	
       //可以指定网址,并且按照需求爬取前多少页的数据
       public static List getInfor(String url,int maxPage){
    	   List proList=new ArrayList();
    	   for(int i=2;i<=maxPage+1;i++){
    	      
    		 try {
    			
				Document doc=Jsoup.connect(url).get();
				Elements table=doc.select(".hq_table");
				Elements tbody=table.select("tbody");
				Elements trList=tbody.select("tr");
				trList.remove(0);
				for(Element tr:trList){
					Elements tdList=tr.select("td");
					Product product=new Product();
					product.setProductName(tdList.get(0).html().toString());
					product.setLowerPrice(tdList.get(1).html().toString());
					product.setAveragePrice(tdList.get(2).html().toString());
					product.setMaxPrice(tdList.get(3).html().toString());
					product.setSpecs(tdList.get(4).html().toString());
					product.setUnit(tdList.get(5).html().toString());
					product.setDate(tdList.get(6).html().toString());
					/*System.out.println(product.toString());*/
					proList.add(product);
				}
				
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
    
    	   url="http://www.xinfadi.com.cn/marketanalysis/1/list/"+i+".shtml";
    	   }
    	   System.out.println("爬取前"+maxPage+"成功");
		return proList;
    	   
       }
	
	
	
}

四、效果展示

java简单实现爬虫、jsoup实现网页抓取、POI实现数据导出Excel_第2张图片
本次爬取实现爬取1000页数据的效果!!!!


五、源码包

欢迎访问我的github首页获取

博主的github地址,获取当前项目源码


完结、散花!!!!!



你可能感兴趣的:(java组件)