Извлечение ссылок с веб-страницы

Используя Java, как я могу извлечь все ссылки с данной веб-страницы?

    скачать java-файл как простой текст / html передать его через Jsoup или html cleaner, оба они похожи и могут использоваться для синтаксического анализа даже некорректного синтаксиса html 4.0, а затем вы можете использовать популярные методы анализа DOM HTML, такие как getElementsByName («a») или в jsoup его даже круто вы можете просто использовать

    File input = new File("/tmp/input.html"); Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/"); Elements links = doc.select("a[href]"); // a with href Elements pngs = doc.select("img[src$=.png]"); // img with src ending .png Element masthead = doc.select("div.masthead").first(); 

    и найдите все ссылки, а затем получите

     String linkhref=links.attr("href"); 

    Взято из http://jsoup.org/cookbook/extracting-data/selector-syntax

    Селекторы имеют тот же синтаксис, что и jQuery если вы знаете jQuery-функцию цепочки, тогда вы обязательно ее полюбите.

    EDIT: Если вы хотите больше учебников, вы можете попробовать это, сделанное mkyong.

    http://www.mkyong.com/java/jsoup-html-parser-hello-world-examples/

    Либо используйте регулярное выражение, либо соответствующие classы, либо используйте парсер HTML. Какой из них вы хотите использовать, зависит от того, хотите ли вы иметь возможность обрабатывать всю сеть или только несколько определенных страниц, на которых вы знаете макет и с которыми вы можете протестировать.

    Простым регулярным выражением, которое соответствует 99% страниц, может быть следующее:

     // The HTML page as a String String HTMLPage; Pattern linkPattern = Pattern.compile("(]+>.+?<\/a>)", Pattern.CASE_INSENSITIVE|Pattern.DOTALL); Matcher pageMatcher = linkPattern.matcher(HTMLPage); ArrayList links = new ArrayList(); while(pageMatcher.find()){ links.add(pageMatcher.group()); } // links ArrayList now contains all links in the page as a HTML tag // ie Text inside tag в // The HTML page as a String String HTMLPage; Pattern linkPattern = Pattern.compile("(]+>.+?<\/a>)", Pattern.CASE_INSENSITIVE|Pattern.DOTALL); Matcher pageMatcher = linkPattern.matcher(HTMLPage); ArrayList links = new ArrayList(); while(pageMatcher.find()){ links.add(pageMatcher.group()); } // links ArrayList now contains all links in the page as a HTML tag // ie Text inside tag 

    Вы можете отредактировать его, чтобы соответствовать больше, быть более стандартным и т. Д., Но в этом случае вам нужен настоящий парсер. Если вас интересует только href = “” и текст между ними, вы также можете использовать это регулярное выражение:

     Pattern linkPattern = Pattern.compile("]+href=[\"']?([\"'>]+)[\"']?[^>]*>(.+?)<\/a>", Pattern.CASE_INSENSITIVE|Pattern.DOTALL); 

    И получить доступ к части ссылки с .group(1) и текстовой частью с .group(2)

    Вы можете использовать библиотеку HTML Parser для достижения этой цели:

     public static List getLinksOnPage(final String url) { final Parser htmlParser = new Parser(url); final List result = new LinkedList(); try { final NodeList tagNodeList = htmlParser.extractAllNodesThatMatch(new NodeClassFilter(LinkTag.class)); for (int j = 0; j < tagNodeList.size(); j++) { final LinkTag loopLink = (LinkTag) tagNodeList.elementAt(j); final String loopLinkStr = loopLink.getLink(); result.add(loopLinkStr); } } catch (ParserException e) { e.printStackTrace(); // TODO handle error } return result; } 

    Этот простой пример, похоже, работает, используя регулярное выражение отсюда

     import java.util.regex.Matcher; import java.util.regex.Pattern; public ArrayList extractUrlsFromString(String content) { ArrayList result = new ArrayList(); String regex = "(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]"; Pattern p = Pattern.compile(regex); Matcher m = p.matcher(content); while (m.find()) { result.add(m.group()); } return result; } 

    и если вам это нужно, это, похоже, работает, чтобы получить HTML-код url, возвращая null, если его невозможно захватить. Он отлично работает с https адресами.

     import org.apache.commons.io.IOUtils; public String getUrlContentsAsString(String urlAsString) { try { URL url = new URL(urlAsString); String result = IOUtils.toString(url); return result; } catch (Exception e) { return null; } } 
     import java.io.*; import java.net.*; public class NameOfProgram { public static void main(String[] args) { URL url; InputStream is = null; BufferedReader br; String line; try { url = new URL("http://www.stackoverflow.com"); is = url.openStream(); // throws an IOException br = new BufferedReader(new InputStreamReader(is)); while ((line = br.readLine()) != null) { if(line.contains("href=")) System.out.println(line.trim()); } } catch (MalformedURLException mue) { mue.printStackTrace(); } catch (IOException ioe) { ioe.printStackTrace(); } finally { try { if (is != null) is.close(); } catch (IOException ioe) { //exception } } } } 

    Вам, вероятно, придется использовать регулярные выражения для тегов ссылок HTML и

    Давайте будем гением компьютера.