htmlunit抓取动态网页(通过JAVA的API可以顺利的抓取网络上的大部分指定的网页内容)
优采云 发布时间: 2021-12-11 04:19htmlunit抓取动态网页(通过JAVA的API可以顺利的抓取网络上的大部分指定的网页内容)
通过JAVA API,可以流畅的抓取互联网上大部分指定的网页内容。下面我就和大家分享一下这个方法的理解和体会。最简单的爬取方法是:
URL url = 新 URL(myurl);
BufferedReader br = newBufferedReader(newInputStreamReader(url.openStream()));
字符串 s = "";
StringBuffer sb = new StringBuffer("");
while ((s = br.readLine()) != null) {
我++;
sb.append(s+"\r\n");
}
这种方法抓取一般网页应该没有问题,但是当某些网页中存在嵌套重定向连接时,会报Serverredirected too manytimes之类的错误。这是因为这个网页里面有一些代码会重定向到其他 For 网页,循环过多导致程序错误。如果只想抓取这个URL中网页的内容,又不想被重定向到其他网页,可以使用下面的代码。
URL urlmy = 新 URL(myurl);
HttpURLConnection con = (HttpURLConnection)urlmy.openConnection();
con.setFollowRedirects(true);
con.setInstanceFollowRedirects(false);
连接();
BufferedReader br = newBufferedReader(newInputStreamReader(con.getInputStream(),"UTF-8"));
字符串 s = "";
StringBuffer sb = new StringBuffer("");
while ((s = br.readLine()) != null) {
sb.append(s+"\r\n");
}
在这种情况下,程序在爬取时不会跳转到其他页面去抓取其他内容,达到了我们的目的。
如果我们在内部网上,我们需要向它添加一个代理。Java 为具有特殊系统属性的代理服务器提供支持。只需在上述程序中添加以下程序即可。
System.getProperties().setProperty("http.proxyHost", proxyName );
System.getProperties().setProperty("http.proxyPort",port);
这样,你就可以在内网中,从网上抓取你想要的东西。
上面程序检索到的所有内容都存储在字符串sb中,我们可以通过正则表达式进行分析,提取出我们想要的具体内容,供我使用,呵呵,这多好啊 一件事!!