在Java中翻录html页面源代码问题

时间:2012-07-09 13:59:59

标签: java html

我正试图破解网站的html页面来源以获取电子邮件。当我运行开膛手/翻斗车或任何你要调用它时,它获取所有源代码但在第160行停止但我可以手动转到网页>右键单击>单击查看页面源然后解析文本。整个源代码有200多行。手动进入每个页面并右键单击的唯一问题是,有超过100k的页面,这将需要一段时间。

这是我用于获取页面源代码的代码:

    public static void main(String[] args) throws IOException, InterruptedException {

    URL url = new URL("http://www.runelocus.com/forums/member.php?102786-wapetdxzdk&tab=aboutme#aboutme");
    URLConnection connection = url.openConnection();

    connection.setDoInput(true);
    InputStream inStream = connection.getInputStream();
    BufferedReader input = new BufferedReader(new InputStreamReader(
            inStream));

    String html = "";
    String line = "";
    while ((line = input.readLine()) != null)
        html += line;
    System.out.println(html);
    }

4 个答案:

答案 0 :(得分:1)

如果您试图抓取HTML页面的内容,则不应该使用这样的原始连接。使用现有库:HTML Unit是一个非常常用的库。

您传入了URL,它为您提供了一个表示页面的对象,您将所有HTML标记作为对象(例如,您获得元素的Div对象,元素的HTMLAnchor对象等)。它将使您的生活更容易使用HTML单元等现有框架,并在其上读取页面内容。

您还可以进行搜索(例如,elementById,elementByTagName,属性等),这样可以在给定预定页面标记的情况下更轻松地跳转文档。

您还可以根据需要模拟点击等。

答案 1 :(得分:0)

我运行了你的代码,它似乎得到了所有HTML,包括HTML结束标记。

您是否认为可能需要登录网站才能看到更多内容?在这种情况下,像用户tsOverflow建议的库可能会有所帮助。

答案 2 :(得分:0)

看了这个,我最好的猜测是你的while循环条件不好。我不熟悉你正在使用的语法。请注意,我有一段时间没有使用过Java。但我觉得应该阅读......

String line = input.readLine();
while(line != null)
{
    html += line; //should use a StringBuilder here for optimization
    line = input.readLine();
}

我注意到了StringBuilder的优化。另外,我认为使用Scanner类会更容易。

答案 3 :(得分:0)

当您使用不同的字符集打开InputStreamReader时,它可能会有帮助吗? 看一下你提到的页面,charset是ISO-8859-1:

BufferedReader input = 
    new BufferedReader(new InputStreamReader(inStream, "ISO-8859-1"));