Как получить веб-контент перед посещением этой веб-страницы - PullRequest
3 голосов
/ 30 июня 2010

как получить описание / содержание веб-страницы для данного URL. (Что-то вроде Google дает краткое описание каждой полученной ссылки). Я хочу сделать это на моей странице JSP.

Спасибо заранее!

1 Ответ

4 голосов
/ 30 июня 2010

Идея: Открыть URL-адрес в виде потока, а затем выполнить HTML-анализ строки в ее метатеге описания.

Получить содержимое URL-адреса:

URL url = new URL("http://www.url-to-be-parsed.com/page.html");
    BufferedReader in = new BufferedReader(
                new InputStreamReader(
                url.openStream()));

Потребуется настроить вышеуказанный код в зависимости от того, что требуется вашей библиотеке HTML-анализатора (поток, строки и т. Д.).

HTML-анализ тегов:

<meta name="description" content="This is a place where webmasters can put a description about this web page" />

Вам также может быть интересно получить заголовок этой страницы:

<title>This is the title of the page!</title>

Внимание: Регулярные выражения не работают надежно в документах HTML, поэтому HTML-парсер лучше.

Пример с HTML-парсером:

  1. Используйте HasAttributeFilter для фильтрации по тегам, имеющим name="description" атрибут
  2. попробовать Node ---> MetaTag приведение
  3. Получить content используя MetaTag.getAttribute()

код:

import org.htmlparser.Node;
import org.htmlparser.Parser;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;
import org.htmlparser.filters.HasAttributeFilter;
import org.htmlparser.tags.MetaTag;

public class HTMLParserTest {
    public static void main(String... args) {
        Parser parser = new Parser();
        //<meta name="description" content="Some texte about the site." />
        HasAttributeFilter filter = new HasAttributeFilter("name", "description");
        try {
            parser.setResource("http://www.youtube.com");
            NodeList list = parser.parse(filter);
            Node node = list.elementAt(0);

            if (node instanceof MetaTag) {
                MetaTag meta = (MetaTag) node;
                String description = meta.getAttribute("content");

                System.out.println(description);
                // Prints: "YouTube is a place to discover, watch, upload and share videos."
            }

        } catch (ParserException e) {
            e.printStackTrace();
        }
    }

}

Замечания:

Если это делается в JSP при каждой загрузке страницы, вы можете получить замедление из-за сетиВвод / вывод по URL.Еще хуже, если вы делаете это каждый раз на лету для своей страницы, на которой есть много URL-ссылок, тогда замедление может быть огромным из-за последовательной работы n URL.Возможно, вы можете хранить эту информацию в базе данных и обновлять ее по мере необходимости, вместо того, чтобы делать это на лету в JSP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...