从网页中提取链接

2022-09-01 20:40:56

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


答案 1

下载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();

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

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

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

选择器具有相同的语法,因为如果您知道jQuery函数链接,那么您一定会喜欢它。jQuery

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

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


答案 2

使用正则表达式和相应的类,或使用 HTML 分析器。要使用哪一个取决于您是希望能够处理整个Web,还是仅处理您知道其布局并且可以测试的几个特定页面。

匹配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>

您可以编辑它以匹配更多,更符合标准等,但在这种情况下,您需要一个真正的解析器。如果您只对 href=“” 和两者之间的文本感兴趣,您也可以使用此正则表达式:

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

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