Jsoup解析HTML,Java读取CSV文件

一、Jsoup简介

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

二、Jsoup的主要功能

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

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

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

注意:jsoup是基于MIT协议发布的,可放心使用于商业项目。

三、Jsoup用法简介

1、获得Document对象

Document document = Jsoup.parse(new File("D:\\guor\\information\\test.html"), "utf-8");

2、使用DOM的方式来取得

获得Document对象后,接下来就是解析Document对象,并从中获取我们想要的元素了。

Document中提供了丰富的方法来获取指定元素。

  1. getElementById(String id):通过id来获取
  2. getElementsByTag(String tagName):通过标签名字来获取
  3. getElementsByClass(String className):通过类名来获取
  4. getElementsByAttribute(String key):通过属性名字来获取
  5. getElementsByAttributeValue(String key, String value):通过指定的属性名字,属性值来获取
  6. getAllElements():获取所有元素

3、通过选择器查找元素

通过类似于css或jQuery的选择器来查找元素

使用的是Element类的下记方法:

public Elements select(String cssQuery)

通过传入一个类似于CSS或jQuery的选择器字符串,来查找指定元素。

四、Jsoup代码实例

博客的初衷是解析HTML中的table,将其转化为Bean。

1、引入依赖

<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.12.1</version>
</dependency>

2、代码实例

//通过Jsoup获取table中对应标签的信息
private static void HTMLParserMapInit() throws IOException {
		Document document = Jsoup.parse(new File("D:\\guor\\information\\test.html"), "utf-8");
        Elements table_title = document.select(".title");
        Elements tables = document.select(".left");
        for(int i=0;i<table_title.size();i++) {
        	String title = table_title.get(i).text();
            String keyLevel1 = "";
		    String keyLevel2 = "";
		    String value = "";
		    String tag_rowspan = "";
		    String tag_colspan = "";
		    String tag_class = "";
		    String tag_text = "";
		    String title = "";
            String table = tables.get(i);
		    Elements tr =  table.select("tr");
		    for(Element eTr : tr){
			    Elements td = eTr.select("td");
			    for(Element eTd : td){
				    tag_rowspan = eTd.attr("rowspan");
				    tag_colspan = eTd.attr("colspan");
				    tag_class = eTd.attr("class");
				    tag_text = eTd.text();
				    if(!tag_colspan.equals("")) {
					    title += tag_text + ",";
				    }
				    if((tag_class.equals("class2"))) {
					    keyLevel1 = tag_text;
				    }else if((tag_class.equals("class1"))) {
					    keyLevel2 = tag_text;
				    }else if(tag_class.equals("")){
					    value += tag_text+",";
				    }
			        }
			    if(!(keyLevel1.equals("")&&keyLevel1.equals(""))) {
				    if(!value.equals("")) {
					    value = value.substring(0,value.length() - 1);
					    shiftInformationHashMap.put(keyLevel1 + "," + keyLevel2, value);
				    }
				        value = "";                                                                                                                                             
                }
		    }
		    title = title.toString().substring(0,title.length() - 1);
		    System.out.println("title,"+title);
		    System.out.println("hashMap,"+shiftInformationHashMap.toString());
				
		}
	}

将HTML中数据解析成hashmap,一切就一目了然了。

五、Map转为Bean

@SuppressWarnings("unchecked")
public static Object HashMapToBeanUtil(Map<String, Object> map,Class clz){
    Map<String,Object> hashMap = StringUtil.checkoutHashMapFormat(map);
	Object obj = null;
	try {
		obj = BeanUtil.populate(hashMap, clz);
		System.out.println(obj.toString());
	} catch (Exception e) {
		e.printStackTrace();
	}
	return obj;
}

六、解析CSV文件

1、CSV文件

2、Bean类

public class ScoreBean {
	private Object id;
	private Object score;

    ...
}

 3、读取CSV文件方法

​public static List<HashMap<String, Object>> readCSVToList(String filePath) throws Exception {
	List<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();
	BufferedReader reader = null;
	try {
		reader = new BufferedReader(new FileReader(filePath));
        String[] headtilte = reader.readLine().split(",");
        String line = null;
        while ((line = reader.readLine()) != null) {
        	HashMap<String, Object> hashMap = new HashMap<String, Object>();
            String[] itemArray = line.split(",");
            for (int i = 0; i < itemArray.length; i++) {
            	hashMap.put(headtilte[i], itemArray[i]);
            }
            list.add(hashMap);
        }
	} catch (Exception e) {
		e.printStackTrace();
	} finally {
		if (null != reader) {
			reader.close();
		}
	}
	return list;
}

​

4、测试类 

public static void main(String[] args) throws Exception {
	String path = "D:\\scoreInfo.csv";
	    List<HashMap<String, Object>> list = readCSVToList(path);
	    for(HashMap hashMap:list) {
	        BeanUtil.HashMapToBeanUtil(hashMap,ScoreBean.class);
	    }
}

 5、控制台输出

上一篇:Spring Boot + Vue 全栈开发,都需要哪些前端知识?

下一篇:用JavaScript实现图片上传并预览

猜你喜欢

转载自blog.csdn.net/guorui_java/article/details/108571805