从网页中提取链接
使用Java,如何从给定的网页中提取所有链接?
下载java文件作为纯文本/ html通过Jsoup或html清洁器两者是相似的,可以用来解析甚至格式错误的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/
使用正则表达式和相应的类,或使用 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)