[英]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.