Как найти гиперссылку на веб-странице с помощью java?

Вопрос:

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

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

Лучший ответ:

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

Загрузите 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 и информацию о них.

Ответ №1

Вы можете использовать пакеты 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

Ответ №2

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

Edit
Пример:

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 в одинарной цитате и т.д.

Ответ №3
Ответ №4
    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/>");
}

Оцените статью
TechArks.Ru
Добавить комментарий