从网页中提取链接

Was*_*RAR 19 java extract hyperlink package

使用Java,我如何从给定的网页中提取所有链接?

sam*_*nta 17

下载java文件作为纯文本/ html传递它通过Jsouphtml清理器两者是相似的,可用于解析甚至格式错误的HTML 4.0语法然后你可以使用流行的HTML DOM解析方法,如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();
Run Code Online (Sandbox Code Playgroud)

并找到所有链接,然后使用detials

String linkhref=links.attr("href");
Run Code Online (Sandbox Code Playgroud)

取自http://jsoup.org/cookbook/extracting-data/selector-syntax

选择器具有相同的语法,jQuery就像你知道jQuery函数链接然后你一定会喜欢它.

编辑:如果你想要更多的教程,你可以试试这个由mkyong制作的.

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


dte*_*ech 7

使用正则表达式和相应的类或使用HTML解析器.您要使用哪一个取决于您是希望能够处理整个网络还是仅仅是您知道布局以及可以测试的几个特定页面.

一个匹配99%页面的简单正则表达式可能是这样的:

// The HTML page as a String
String HTMLPage;
Pattern linkPattern = Pattern.compile("(<a[^>]+>.+?<\/a>)",  Pattern.CASE_INSENSITIVE|Pattern.DOTALL);
Matcher pageMatcher = linkPattern.matcher(HTMLPage);
ArrayList<String> links = new ArrayList<String>();
while(pageMatcher.find()){
    links.add(pageMatcher.group());
}
// links ArrayList now contains all links in the page as a HTML tag
// i.e. <a att1="val1" ...>Text inside tag</a>
Run Code Online (Sandbox Code Playgroud)

你可以编辑它以匹配更多,更符合标准等等,但在这种情况下你需要一个真正的解析器.如果你只对href =""及其间的文字感兴趣,你也可以使用这个正则表达式:

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

并使用.group(1)和文本部分访问链接部分.group(2)

  • 我认为您提到了'... href = [\“']?([^ \”'] +)...'。但是话又说回来..如果href =“ blablalba / Mc'Chicken”。字符串在命中单引号时会不会被截断? (2认同)