JAVA抓取网站网页内容
来源:互联网 发布:淘宝发布虚拟宝贝教程 编辑:程序博客网 时间:2024/05/01 03:47
最近在用JAVA研究下爬网技术,呵呵,入了个门,把自己的心得和大家分享下
以下提供二种方法,一种是用apache提供的包.另一种是用JAVA自带的.
代码如下:
// 第一种方法
//这种方法是用apache提供的包,简单方便
//但是要用到以下包:commons-codec-1.4.jar
// commons-httpclient-3.1.jar
// commons-logging-1.0.4.jar
public static String createhttpClient(String url, String param) {
HttpClient client = new HttpClient();
String response = null;
String keyword = null;
PostMethod postMethod = new PostMethod(url);
// try {
// if (param != null)
// keyword = new String(param.getBytes("gb2312"), "ISO-8859-1");
// } catch (UnsupportedEncodingException e1) {
// // TODO Auto-generated catch block
// e1.printStackTrace();
// }
// NameValuePair[] data = { new NameValuePair("keyword", keyword) };
// // 将表单的值放入postMethod中
// postMethod.setRequestBody(data);
// 以上部分是带参数抓取,我自己把它注销了.大家可以把注销消掉研究下
try {
int statusCode = client.executeMethod(postMethod);
response = new String(postMethod.getResponseBodyAsString()
.getBytes("ISO-8859-1"), "gb2312");//这里要注意下 gb2312要和你抓取网页的编码要一样
String p = response.replaceAll("\\&[a-zA-Z]{1,10};", "")
.replaceAll("<[^>]*>", "");//去掉网页中带有html语言的标签
System.out.println(p);
} catch (Exception e) {
e.printStackTrace();
}
return response;
}
// 第二种方法
// 这种方法是JAVA自带的URL来抓取网站内容
public String getPageContent(String strUrl, String strPostRequest,
int maxLength) {
// 读取结果网页
StringBuffer buffer = new StringBuffer();
System.setProperty("sun.net.client.defaultConnectTimeout", "5000");
System.setProperty("sun.net.client.defaultReadTimeout", "5000");
try {
URL newUrl = new URL(strUrl);
HttpURLConnection hConnect = (HttpURLConnection) newUrl
.openConnection();
// POST方式的额外数据
if (strPostRequest.length() > 0) {
hConnect.setDoOutput(true);
OutputStreamWriter out = new OutputStreamWriter(hConnect
.getOutputStream());
out.write(strPostRequest);
out.flush();
out.close();
}
// 读取内容
BufferedReader rd = new BufferedReader(new InputStreamReader(
hConnect.getInputStream()));
int ch;
for (int length = 0; (ch = rd.read()) > -1
&& (maxLength <= 0 || length < maxLength); length++)
buffer.append((char) ch);
String s = buffer.toString();
s.replaceAll("\\&[a-zA-Z]{1,10};", "").replaceAll("<[^>]*>", "");
System.out.println(s);
rd.close();
hConnect.disconnect();
return buffer.toString().trim();
} catch (Exception e) {
// return "错误:读取网页失败!";
//
return null;
}
}
然后写个测试类:
public static void main(String[] args) {
String url = "http://www.renren.com";
String keyword = "人人";
createhttpClient p = new createhttpClient();
String response = p.createhttpClient(url, keyword); // 第一种方法
// p.getPageContent(url, "post", 100500);//第二种方法
}
呵呵,看看控制台吧,是不是把网页的内容获取了
第三种方法:
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
public class GetUrlToHtml {
public static void main(String[] args) {
InputStream in = null;
OutputStream out = null;
try {
if ((args.length != 1)&& (args.length != 2))
throw new IllegalArgumentException("Wrong number of args");
URL url = new URL(args[0]);
in = url.openStream();
if (args.length == 2)
out = new FileOutputStream(args[1]);
else out = System.out;
byte[] buffer = new byte[4096];
if(out==System.out){new String();}
int bytes_read;
while((bytes_read = in.read(buffer)) != -1){
out.write(buffer, 0, bytes_read);}
}
catch (Exception e) {
System.err.println(e);
System.err.println("Usage: java GetURL <URL> [<filename>]");
}
finally {
try { in.close(); out.close(); } catch (Exception e) {}
}
}
}
以下提供二种方法,一种是用apache提供的包.另一种是用JAVA自带的.
代码如下:
// 第一种方法
//这种方法是用apache提供的包,简单方便
//但是要用到以下包:commons-codec-1.4.jar
// commons-httpclient-3.1.jar
// commons-logging-1.0.4.jar
public static String createhttpClient(String url, String param) {
HttpClient client = new HttpClient();
String response = null;
String keyword = null;
PostMethod postMethod = new PostMethod(url);
// try {
// if (param != null)
// keyword = new String(param.getBytes("gb2312"), "ISO-8859-1");
// } catch (UnsupportedEncodingException e1) {
// // TODO Auto-generated catch block
// e1.printStackTrace();
// }
// NameValuePair[] data = { new NameValuePair("keyword", keyword) };
// // 将表单的值放入postMethod中
// postMethod.setRequestBody(data);
// 以上部分是带参数抓取,我自己把它注销了.大家可以把注销消掉研究下
try {
int statusCode = client.executeMethod(postMethod);
response = new String(postMethod.getResponseBodyAsString()
.getBytes("ISO-8859-1"), "gb2312");//这里要注意下 gb2312要和你抓取网页的编码要一样
String p = response.replaceAll("\\&[a-zA-Z]{1,10};", "")
.replaceAll("<[^>]*>", "");//去掉网页中带有html语言的标签
System.out.println(p);
} catch (Exception e) {
e.printStackTrace();
}
return response;
}
// 第二种方法
// 这种方法是JAVA自带的URL来抓取网站内容
public String getPageContent(String strUrl, String strPostRequest,
int maxLength) {
// 读取结果网页
StringBuffer buffer = new StringBuffer();
System.setProperty("sun.net.client.defaultConnectTimeout", "5000");
System.setProperty("sun.net.client.defaultReadTimeout", "5000");
try {
URL newUrl = new URL(strUrl);
HttpURLConnection hConnect = (HttpURLConnection) newUrl
.openConnection();
// POST方式的额外数据
if (strPostRequest.length() > 0) {
hConnect.setDoOutput(true);
OutputStreamWriter out = new OutputStreamWriter(hConnect
.getOutputStream());
out.write(strPostRequest);
out.flush();
out.close();
}
// 读取内容
BufferedReader rd = new BufferedReader(new InputStreamReader(
hConnect.getInputStream()));
int ch;
for (int length = 0; (ch = rd.read()) > -1
&& (maxLength <= 0 || length < maxLength); length++)
buffer.append((char) ch);
String s = buffer.toString();
s.replaceAll("\\&[a-zA-Z]{1,10};", "").replaceAll("<[^>]*>", "");
System.out.println(s);
rd.close();
hConnect.disconnect();
return buffer.toString().trim();
} catch (Exception e) {
// return "错误:读取网页失败!";
//
return null;
}
}
然后写个测试类:
public static void main(String[] args) {
String url = "http://www.renren.com";
String keyword = "人人";
createhttpClient p = new createhttpClient();
String response = p.createhttpClient(url, keyword); // 第一种方法
// p.getPageContent(url, "post", 100500);//第二种方法
}
呵呵,看看控制台吧,是不是把网页的内容获取了
第三种方法:
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
public class GetUrlToHtml {
public static void main(String[] args) {
InputStream in = null;
OutputStream out = null;
try {
if ((args.length != 1)&& (args.length != 2))
throw new IllegalArgumentException("Wrong number of args");
URL url = new URL(args[0]);
in = url.openStream();
if (args.length == 2)
out = new FileOutputStream(args[1]);
else out = System.out;
byte[] buffer = new byte[4096];
if(out==System.out){new String();}
int bytes_read;
while((bytes_read = in.read(buffer)) != -1){
out.write(buffer, 0, bytes_read);}
}
catch (Exception e) {
System.err.println(e);
System.err.println("Usage: java GetURL <URL> [<filename>]");
}
finally {
try { in.close(); out.close(); } catch (Exception e) {}
}
}
}
- JAVA抓取网站网页内容
- JAVA抓取网站网页内容
- JAVA使用爬虫抓取网站网页内容
- JAVA 抓取网页内容
- 【JAVA】 抓取网页内容
- JAVA 抓取网页内容
- java 抓取网页内容
- java抓取网页内容
- java网页抓取内容
- java抓取网页内容
- JAVA 抓取网页内容
- Java抓取网页内容
- Java抓取网页内容
- 爬网入门:JAVA抓取网站网页内容
- 爬网入门:JAVA抓取网站网页内容
- java 抓取 https 网页内容
- java抓取全部网页内容
- 记录几个抓取网页内容的网站
- APK反编译工具学习笔记
- 浅析Microsoft .net PetShop程序中的购物车和订单处理模块(Profile技术,异步MSMQ消息)
- IBATIS 批量更改操作
- 页面有背景图片,拉动页面时内容动,背景图片不动。
- ipa图片资源
- JAVA抓取网站网页内容
- SpringMVC 实现根据不同的请求类型(请求方法method=GetOrPost)分别响应
- ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2
- dma_alloc_writecombine
- shell 变量和参数
- Facebook手机面市已晚?
- IBATIS 查询操作 查询条件包含多个元素
- ComInterfaceType Enumeration
- JSOUP初探