Java - 如何从网站检索文本(非来源)

时间:2012-01-31 05:17:37

标签: java bots

我想用java从网站上检索文本。我可以通过以下方式轻松获取源代码:(谢谢随机的互联网用户,将其发布在其他地方)

    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.URL;
    import java.net.URLConnection;

    public class WebCrawler{
        public static void main(String[] args) {
            try {
                URL google = new URL("http://stackoverflow.com");
                URLConnection yc = google.openConnection();
                BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream()));
                String inputLine;
                while ((inputLine = in.readLine()) != null) {
                    System.out.println(inputLine);

                }
                in.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

然而,这让我有些网站返回403s的问题。有办法解决这个问题吗?

很简单,我希望使用java创建一个简单的机器人,它可以扫描论坛帖子并根据用户查询自动响应。我能在java中做到这一点吗?或者我是否需要从另一种语言/数据检索方法的角度来看待它?

感谢您的时间。

2 个答案:

答案 0 :(得分:2)

是的,这可以用Java完成。从理论上讲,Web浏览器可以做任何事情,Java可以做 - 因为在最糟糕的情况下,你可以用Java编写Web浏览器。

403是“禁止”的回应。您可能需要设置特定的User-Agent标头,否则该网站可能需要HTTP基本身份验证。或者也许是限制你的速度,你需要看到遵守他们的robots.txt规则...

Java当然不是(在我看来)用于编写此类代码的最简单的语言,但是你在这里处于一个不错的轨道上。

至于标题中的“非来源” - 网页的来源是文本。如果您下载该页面,您将获得HTML;由你来解析你需要的东西并丢弃渣滓。

答案 1 :(得分:1)

您可能会收到403,因为您没有更改您的用户代理(Java),并且网站通过阻止它来响应您的机器人。如果您更改了您的用户代理变量,您可以进入,但这不是很道德,因为这些网站因某种原因阻止了Java用户代理。