我正在使用jsoup来检索500个网站上的所有超链接。
第一个问题是我不知道网站包含多少个网页。所以我从网站首页的网址开始,解析首页上的所有链接。然后我需要检查我得到的网址是网站的子网页,还是只是出站链接。如果网址是网站的子网页,我将解析这些网址上的链接。如果网址只是出站链接,我会将网址保存到txt文件中。
这是我的代码。到目前为止,程序可以读取网页的种子URL列表,并检索网页上的所有超链接,并将超链接保存到txt文件中。
接下来,我想重定向到超链接并解析这些网站。但我需要确保新的超链接与种子网址不同。例如,see url是www.facebook.com。如果其中一个新链接是www.facebook.com/about,我将使用新链接作为新种子来解析www.facebook.com/about上的链接。如果其中一个新链接是www.twitter.com,我将保存链接,但不要将其视为新种子。
有什么建议吗?
package org.jsoup;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.*;
public class ListLinks2 {
public static void main(String[] args) throws IOException {
BufferedReader br;
BufferedWriter bw;
try {
bw = new BufferedWriter(new FileWriter("d:\\output.txt"));
br = new BufferedReader (new FileReader("d:\\input.txt"));
}
finally{
}
while(true) {
try {
String url=br.readLine( );
if(url == null || url.isEmpty()) {
break;
}
print("This is seed link:\n Fetching %s...", url);
Document doc = Jsoup.connect(url).get();
Elements links = doc.getElementsByTag("a");
print("\nLinks: (%d)", links.size());
for (Element link : links) {
print("%s %s", link.absUrl("href"), trim(link.text(), 35));
bw.write(link.absUrl("href"));
bw.write("\t ");
bw.write(link.text());
bw.write("\r\n ");
}
}
finally{
}
}
bw.close();
br.close();
}
private static void print(String msg, Object... args) throws IOException {
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;
}
}