如何通过Java从特定HTML页面检索内容

时间:2014-10-17 21:12:32

标签: java html-parsing jsoup

我正在申请解析任何网站的html内容,但今天我找到了我的实施例外。 我试图从这个网址获取内容:http://tomfishburne.com/2014/09/socialmedia.html我总是遇到以下错误:java.io.IOException:服务器返回HTTP响应代码:403。我使用的是JSOUP库。我尝试了没有Jsoup选项的其他2个选项但是没有成功。此页面可从浏览器访问,但不能从java访问。你能帮忙提一些建议吗?

由于

    Document doc;
    String url = "http://tomfishburne.com/2014/09/socialmedia.html";
    try {

        Response response = Jsoup
                .connect(url)
                .ignoreContentType(true)
                .userAgent(
                        "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0")
                .timeout(12000)
                .followRedirects(true).execute();
        doc = response.parse();
    } catch (Exception e) {
        try {
            doc = Jsoup.connect(url)
                    .userAgent(
                            "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0")
                    .get();
        } catch (IOException e1) {
            try {
                URL url2 = new URL(url);
                HttpURLConnection conn = (HttpURLConnection) url2
                        .openConnection();
                conn.setRequestProperty(
                        "User-Agent",
                        "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36");

                BufferedReader in;
                in = new BufferedReader(new InputStreamReader(
                        conn.getInputStream(), "UTF-8"));
            } catch (UnsupportedEncodingException e2) {
            } catch (IOException e2) {
                //This exception is always thrown because of 403 error code
            }

        }
    }

}

1 个答案:

答案 0 :(得分:0)

您可以做的是将ignoreHttpErrors(true)添加到您的调用中,例如:

Document document = Jsoup.connect(url)
    .userAgent('Mozilla/5.0 (X11; Linux x86_64; rv:32.0) Gecko/20100101 Firefox/32.0')
    .ignoreHttpErrors(true)
    .get()

事实证明,即使您从网络浏览器访问它,该网站也始终返回403 Forbidden - 例如,您可以在Firebug中看到它。

我已经创建了一个正在运行的Groovy脚本 - https://gist.github.com/wololock/1a002dfaff5d49d14871它运行良好。