Java 我可以用jsoup做屏幕刮片吗
我是Jsoup的新手,我想做一个屏幕抓取来获得链接的层次结构。我能够从第一页获得链接,但我需要知道如何才能更深入地获得每个链接的链接。这就是我目前所拥有的。它打印出所有的URL,但我想更深入地打印每个URL,或者如果它太多,至少我想选择一个URL示例*a:从输出中学习HTML,并打印其所有子URLJava 我可以用jsoup做屏幕刮片吗,java,url,screen-scraping,jsoup,html-parser,Java,Url,Screen Scraping,Jsoup,Html Parser,我是Jsoup的新手,我想做一个屏幕抓取来获得链接的层次结构。我能够从第一页获得链接,但我需要知道如何才能更深入地获得每个链接的链接。这就是我目前所拥有的。它打印出所有的URL,但我想更深入地打印每个URL,或者如果它太多,至少我想选择一个URL示例*a:从输出中学习HTML,并打印其所有子URL import org.jsoup.Jsoup; import org.jsoup.helper.Validate; import org.jsoup.nodes.Document; import or
import org.jsoup.Jsoup;
import org.jsoup.helper.Validate;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
/**
* Example program to list links from a URL.
*/
public class ListLinks {
public static void main(String[] args) throws IOException {
String url = "http://www.w3schools.com/";
print("Fetching %s...", url);
Document doc = Jsoup.connect(url).get();
Elements links = doc.getElementsByTag("a");
print("\nLinks: (%d)", links.size());
for (Element link : links) {
print(" * a: <%s> (%s)", link.absUrl("href") /*link.attr("href")*/, trim(link.text(), 35));
}
}
private static void print(String msg, Object... args) {
System.out.println(String.format(msg, args));
}
private static String trim(String s, int width) {
if (s.length() > width)
return s.substring(0, width-1) + ".";
else
return s;
}
}
输出:
Fetching http://www.w3schools.com/...
Links: (127)
* a: <> ()
* a: <http://www.w3schools.com/html/default.asp> (Learn HTML)
* a: <http://www.w3schools.com/html/html5_intro.asp> (Learn HTML5)
* a: <http://www.w3schools.com/css/default.asp> (Learn CSS)
* a: <http://www.w3schools.com/css3/default.asp> (Learn CSS3)
...
...
有更多的URL,但我不想全部显示它们您可以迭代每个子URI,创建一个新的JSOUP文档,然后收集所有子链接 伪代码示例:
download(String toplevelURI, int level) {
if (level > MAX_LEVEL) {
return; //termination condition
}
Document doc = Jsoup.connect(url).get();
Elements links = doc.getElementsByTag("a");
for (Element link : links) {
String url = link.absUrl("href");
link.add(url); //store the current level of link
download(url, level++); //get all children of current link
}
}
没有什么事情需要处理
直到您要下载的最大深度
链接需要存储在树结构中,以保持父链接/子链接关系
代码执行深度优先,即它将跟随链接,直到到达没有链接的页面或达到最大深度。尝试改变它,使其深度优先