0

我正在使用 JSoup 解析网页的所有链接,然后测试这些收集到的链接的响应代码。

我遇到的问题是我正在测试的一些页面具有使用以下方式打开 javascript 弹出窗口的链接: 。我确定有一种简单的方法可以避免选择此链接,但我想不通了!

我的代码:

PingUrls(String pageUrl) {
        url = pageUrl;
        int i = 0;
        int retries = 3;

        while (i < retries){
            try {
                response = Jsoup.connect(url)
                        .userAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.21 (KHTML, like Gecko) Chrome/19.0.1042.0 Safari/535.21")
                        .timeout(10000)
                        .execute();
                success = true;
                break;
            } catch (IOException e) {
            }
            System.out.println("Attempt "+i);
            i++;
        }
    }

    public int getUrlStatus(){
        if(success){
            int statusCode = response.statusCode();
            return statusCode;
        }else {
            return 404;
        }
    }

    public ArrayList<String> getLinks(String targetValue){
        ArrayList<String> urls = new ArrayList<String>();
        try {
            Document doc = response.parse();

            Elements element = doc.select(targetValue+" a[href]");
            for (Element page : element){
                urls.add(page.attr("abs:href"));
            }           
            return urls;
        } catch (IOException e) {
            System.out.println(e);
            return null;
        }
    }
4

1 回答 1

1

首先,我建议使用 Set 而不是 List。(如果你不熟悉 Collections,Set 会确保没有重复的元素)

另外,我会放一个像 manageURL(String url); 这样的方法。在将其添加到集合之前。在其中进行一些测试以确保它以您想要的方式爬行。就像测试 url 的绝对路径、规范路径,并确保它是 http 或 https 协议的。

于 2012-05-15T11:15:46.700 回答