Как найти гиперссылку на веб-странице, используя Java? - PullRequest
0 голосов
/ 01 августа 2010

как мы можем узнать количество гиперссылок на странице.
и как узнать что это все ?? Мне нужно разработать вещи в плане Java, а не в какой-либо рамочной конструкции, что означает, используя метод
JAVA.NET. *; , любой объем? Как я могу это сделать? ребята, вы можете дать мне правильный пример ??

мне нужно получить все ссылки на странице, и мне нужно сохранить это в базе данных, все ссылки с доменным именем

Ответы [ 5 ]

5 голосов
/ 02 августа 2010

Попробуйте использовать библиотеку jsoup .

Скачайте jar проекта и скомпилируйте этот фрагмент кода:

    Document doc = Jsoup.parse(new URL("http://www.bits4beats.it/"), 2000);

    Elements resultLinks = doc.select("a");
    System.out.println("number of links: " + resultLinks.size());
    for (Element link : resultLinks) {
        System.out.println();
        String href = link.attr("href");
        System.out.println("Title: " + link.text());
        System.out.println("Url: " + href);
    }

Код печатает номера гипертекстовых элементов на html-странице и информацию о них.

5 голосов
/ 01 августа 2010

Вы можете использовать пакеты javax.swing.text.html и javax.swing.text.html.parser , чтобы добиться этого:

import java.io.*;
import java.net.URL;
import java.util.Enumeration;

import javax.swing.text.MutableAttributeSet;
import javax.swing.text.html.*;
import javax.swing.text.html.parser.*;

public class Test {
   public static void main(String[] args) throws Exception  {
      Reader r = null;

      try   {
         URL u = new URL(args[0]);
         InputStream in = u.openStream();
         r = new InputStreamReader(in);

         ParserDelegator hp = new ParserDelegator();
         hp.parse(r, new HTMLEditorKit.ParserCallback() {
            public void handleStartTag(HTML.Tag t, MutableAttributeSet a, int pos) {
               // System.out.println(t);
               if(t == HTML.Tag.A)  {
                  Enumeration attrNames = a.getAttributeNames();
                  StringBuilder b = new StringBuilder();
                  while(attrNames.hasMoreElements())    {
                      Object key = attrNames.nextElement();
                      if("href".equals(key.toString())) {
                          System.out.println(a.getAttribute(key));
                      }
                  }
               }
            }
         }, true);
      }finally {
         if(r != null)  {
            r.close();
         }
      }
   }
}

Скомпилируйте и назовите его так:

java Test http://www.oracle.com/technetwork/java/index.html
3 голосов
/ 01 августа 2010
3 голосов
/ 01 августа 2010

Лучшим вариантом является использование некоторой библиотеки html-анализатора, но если вы не хотите использовать какую-либо такую ​​стороннюю библиотеку, вы можете попытаться сделать это, сопоставив ее с регулярным выражением, используя java-классы Pattern и Matcher из пакета regex .

Редактировать Пример:

String regex="\\b(?<=(href=\"))[^\"]*?(?=\")";
Pattern pattern = Pattern.compile(regex);

Matcher m = pattern.matcher(str_YourHtmlHere);
while(m.find()) {
  System.out.println("FOUND: " + m.group());
}

В приведенном выше примере это простое базовое регулярное выражение, которое найдет все ссылки, обозначенные атрибутом href. Возможно, вам придется улучшить регулярное выражение для правильной обработки всех сценариев, таких как href с URL в одинарных кавычках и т. Д.

0 голосов
/ 11 июня 2014
    Pattern p = Pattern.compile("(https?://([-\\w\\.]+)+(:\\d+)?(/([\\w/_\\.]*(\\?\\S+)?)?)?)");

    Matcher m = p.matcher(br.toString());


    while (m.find() == true) {

        resp.getWriter().print("<a href="+m.group(0).toString()+">"+m.group(0).toString()+"</a><br/>");
      }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...