manera más rápida será analizar la información específica usted mismo. Parece que sabes la estructura HTML precisamente de antemano. Los métodos BufferedReader
, String
y StringBuilder
deberían ser suficientes. He aquí un ejemplo puntapié inicial que muestra el primer párrafo de su propia pregunta:
public static void main(String... args) throws Exception {
URL url = new URL("http://stackoverflow.com/questions/2971155");
BufferedReader reader = null;
StringBuilder builder = new StringBuilder();
try {
reader = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"));
for (String line; (line = reader.readLine()) != null;) {
builder.append(line.trim());
}
} finally {
if (reader != null) try { reader.close(); } catch (IOException logOrIgnore) {}
}
String start = "<div class=\"post-text\"><p>";
String end = "</p>";
String part = builder.substring(builder.indexOf(start) + start.length());
String question = part.substring(0, part.indexOf(end));
System.out.println(question);
}
de análisis se encuentra en prácticamente todos los casos, sin duda más rápido que la coincidencia de patrones. La coincidencia de patrones es más fácil, pero existe un cierto riesgo de que arroje resultados inesperados, sin duda cuando se utilizan patrones de expresiones regulares complejos.
También puede considerar utilizar un analizador HTML de terceros más flexible en lugar de escribir uno usted mismo. No será tan rápido como analizarse con información conocida de antemano. Sin embargo, será más conciso y flexible. Con analizadores de HTML decentes, la diferencia de velocidad es bastante insignificante. Recomiendo encarecidamente Jsoup para esto. Es compatible con jQuery-like CSS selectors. La extracción del párrafo firsrt de su pregunta sería entonces tan fácil como:
public static void main(String... args) throws Exception {
Document document = Jsoup.connect("http://stackoverflow.com/questions/2971155").get();
String question = document.select("#question .post-text p").first().text();
System.out.println(question);
}
No está claro qué página Web que está hablando, por lo que no puede dar un ejemplo más detallado cómo se puede seleccionar la información específica de la página específica usando Jsoup. Si todavía no puede resolverlo usando Jsoup y CSS selectors, siéntase libre de publicar la URL en un comentario y sugeriré cómo hacerlo.
No debe analizar HTML con expresiones regulares: http://blog.codinghorror.com/parsing-html -the-cthulhu-way/ –