Categorías
Otros

jsoup crawler simple usar notas

Ha pasado mucho tiempo desde que escribí un blog. Hace poco, acabo de atender una necesidad en el trabajo. La solicitud será similar a «Este es un enlace que compartíhttp://www.cnblogs.com/TTyb/p/5996847.html«El vínculo de la cadena se corta y los 30 caracteres al principio de la imagen, el título y el cuerpo en el enlace se cortan; después de que los requisitos son claros, usted puede pensar en las herramientas utilizadas!
Esta vez uso jsoup que no he contactado antes para rastreo html; otros son buenos para decir, el vínculo de la cadena sólo necesita una expresión regular para resolver, obtener el enlace directamente para obtener la solicitud Obtener el contenido html, y finalmente utilizar jsoup para analizar todos los requisitos! Aquí hay un breve registro del código;

import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.httpclient.HttpException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import cn.creditease.fso.cupid.utils.HttpclientProxy;

public class Test4ZHCMain {
/**
 * jsoup crawler
 * <dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.8.3</version>
</dependency>
 * 
 * */
    public static void main(String[] args) throws HttpException, IOException {
        //the text inner link
        String str = "This is a link I shared http://blog.csdn.net/growing_tree/article/details/50474165";
        //the result of link in the text
        String result = "";
        String regEx = "((http[s]{0,1}|ftp)://[a-zA-Z0-9\.\-]+\.([a-zA-Z]{2,4})(:\d+)?(/[a-zA-Z0-9\.\[email protected]#$%^&*+?:_/=<>]*)?)|(www.[a-zA-Z0-9\.\-]+\.([a-zA-Z]{2,4})(:\d+)?(/[a-zA-Z0-9\.\[email protected]#$%^&*+?:_/=<>]*)?)";
        Pattern pattern = Pattern.compile(regEx);
        Matcher matcher = pattern.matcher(str);
        while (matcher.find()) {
            result = matcher.group(1);
        }
        System.out.println("catch the link is:"+result);
        //request the link 
        String execGETMethod = HttpclientProxy.execGETMethod(result);
        //http request result
        System.out.println(execGETMethod);
        Document parse = Jsoup.parse(execGETMethod);
        //get title tag node list
        Elements title = parse.getElementsByTag("title");
        //get p tag node list
        Elements ps = parse.getElementsByTag("p");
        // Elements's index
        int i = 0 ;
        //get p tag node element 
        Element p = ps.get(i);
        // if the text of p tag that has String "copyright" inside 
        if (p.text().contains("copyright")) {
            p=ps.get(i+1);
        }
        //get img tage
        Elements img = parse.getElementsByTag("img");

        System.out.println(title.text());
        System.out.println(img.size()>0?img.get(0).attr("src"):"undefined");
        System.out.println(p.text());
    }
}

Nota: La clase de herramienta httpclient que encapsulado se utiliza aquí, así que si desea utilizar este código directamente, debe escribir una simple solicitud get usted mismo; debido a que es relativamente simple, el código de herramienta solicitado no se incluye;

  Secuencia de Python tipo 2 (tupla de tupla)

Los elementos en el código son de tipo ArrayList, por lo que es fácil de hacer aquí, puede usar la marca de esquina para obtener el primer elemento que desee! ¡También puedes darle la vuelta! El objeto Document tiene muchos métodos para obtener nodos, como la obtención de nombres, la obtención de identificadores, etc.; Utilizo el nombre aquí para obtenerlo; se puede obtener el nodo y simplemente reproducirlo. ¡Mucha diversión!

.

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *