Java analiza archivos HTML a través de Jsoup

1. Introducción a Jsoup

Jsoup es un analizador HTML de Java que puede analizar directamente una dirección URL y contenido de texto HTML. Proporciona una API que ahorra mucho trabajo, que puede recuperar y manipular datos a través de DOM, CSS y métodos de operación similares a jQuery.

Dos, la función principal de Jsoup

1. Analizar HTML de una URL, archivo o cadena

2. Utilice selectores DOM o CSS para buscar y recuperar datos

3. Elementos, atributos y texto HTML operables

Nota: jsoup se lanza según el protocolo MIT y se puede utilizar en proyectos comerciales con confianza.

Tres, introducción al uso de Jsoup

1. Obtenga el objeto Documento

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

2. Utilice DOM para obtener

Después de obtener el objeto Documento, el siguiente paso es analizar el objeto Documento y obtener los elementos que queremos de él.

Document proporciona una gran cantidad de métodos para obtener elementos específicos.

  1. getElementById (String id): obtener por id
  2. getElementsByTag (String tagName): obtener por nombre de etiqueta
  3. getElementsByClass (String className): obtener por nombre de clase
  4. getElementsByAttribute (clave de cadena): obtener por nombre de atributo
  5. getElementsByAttributeValue (clave de cadena, valor de cadena): se obtiene especificando el nombre del atributo y el valor del atributo
  6. getAllElements (): Obtiene todos los elementos

3. Encuentra el elemento a través del selector.

Encuentre elementos a través de selectores similares a css o jQuery

Se utiliza el siguiente método de la clase Element:

public Elements select(String cssQuery)

Encuentre el elemento especificado pasando una cadena de selección similar a CSS o jQuery.

Cuatro, ejemplo de código de Jsoup

La intención original del blog es analizar la tabla en HTML y convertirla en Bean.

1. Introducir dependencias

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

2. Ejemplo de código

//通过Jsoup获取table中对应标签的信息
private static void HTMLParserMapInit() throws IOException {
		Document document = Jsoup.parse(new File("D:\\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());
				
		}
	}

Analice los datos en HTML en un mapa de hash, todo está claro de un vistazo.

Cinco, Mapa a Bean

public static <T, V> T map2Bean(Map<String,V> map,Class<T> clz) throws Exception{
	T obj = clz.newInstance();
	Field field = null;
	for(String key : map.keySet()) {
		field = obj.getClass().getDeclaredField(key);
		field.setAccessible(true);
		field.set(obj, map.get(key));
	}
	return obj;
}

Seis, analiza el archivo CSV

1. Archivo CSV

2. Clase de frijoles

@Data
public class ScoreBean {
	private Object id;
	private Object score;
}

 3. Cómo leer un archivo 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. Pruebas 

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. Salida de consola

 

Aspectos destacados del pasado:

Resumen del sistema de conocimiento de Java (versión 2021)

Resumen de conocimientos básicos de Java multiproceso (absolutamente clásico)

Notas de estudio super detalladas de SpringBoot

Resumen de algoritmos y estructuras de datos comunes

Patrones de diseño de Java: un análisis completo de 23 patrones de diseño (súper detallado)

Resumen de las preguntas de la entrevista de Java (con respuestas)

Supongo que te gusta

Origin blog.csdn.net/guorui_java/article/details/114714216
Recomendado
Clasificación