Я могу использовать jsoup, чтобы сделать скриншот экрана
Я новичок в Jsoup. Я полагаю, что нужно сделать скриншот для получения иерархии ссылок. Я могу получить ссылки с первой страницы, но мне нужно знать, как я могу пойти глубже и получить ссылку на каждую ссылку. Это то, что я имею до сих пор. Он распечатывает все URL-адреса, но я хочу пойти глубже и напечатать URL-адрес каждого из них или, если это слишком много, по крайней мере, я хочу выбрать один пример URL "* a: http://www.w3schools.com/html/default.asp (Learn HTML) "это из вывода и распечатать все его дочерние URL.
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, но я не хочу отображать их все
1 ответ
Вы можете выполнить итерацию для каждого дочернего 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
}
}
Есть несколько вещей, чтобы позаботиться о
- До какой глубины вы хотите скачать (MAX_DEPTH)
- Ссылки должны храниться в древовидной структуре, чтобы сохранить связь родительская ссылка / дочерняя ссылка
- Код сначала выполняет глубину, т.е. он будет следовать по ссылке, пока не достигнет страницы, на которой нет ссылки, или не достигнет MAX_DEPTH. попробуйте изменить его так, чтобы его глубина сначала