繁体   English   中英

在Java中翻录HTML页面源的麻烦

[英]Ripping html page source trouble in Java

我正在尝试翻录网站的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);
    }

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

您传入URL,它为您提供了一个代表页面的对象,并且您将所有HTML标记都作为Objects获得(例如,您获得了元素的Div对象,元素的HTMLAnchor对象等)。 使用诸如HTML Unit之类的现有框架并阅读其中的页面内容,将使您的生活变得更加轻松。

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

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

我运行了您的代码,它似乎正在获取所有HTML,包括HTML结束标记。

您是否认为可能必须登录网站才能查看更多信息? 在这种情况下,类似tsOverflow用户的库可能会有所帮助。

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

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

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

当您打开具有不同字符集的InputStreamReader时,它可能会有所帮助? 查看您提到的页面,字符集为ISO-8859-1:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM