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;
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!
.