如何获取网站的所有出站链接?

时间:2013-01-28 03:38:39

标签: java html jsoup java-io

我正在使用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;
    }
}

0 个答案:

没有答案