初学网络爬虫

来源:互联网 发布:热血沸腾的音乐知乎 编辑:程序博客网 时间:2024/05/04 22:24

如果把互联网比作一张巨大的编织的蜘蛛网的话,那么网络爬虫就是网上的那只蜘蛛。而程序员就是控制那只蜘蛛的那个人。网络爬虫通常的运作方式通过链接来获取链接对应的网页中的内容,当然也可以去获取链接中的链接,比如网络爬虫从a链接的页面获取了b链接,然后可以通过b链接来获取b对应的页面以此类推。最后再获取通过信息的过滤来获取自己想要的内容。

当然排除硬件,软件等等条件的限制,理论上可以把整个互联网的所有网页的内容都可以获取。当然从理论上来说。

这边介绍一下简单的爬虫抓取网页内容的例子。

通过URL来进行网页内容的抓取,这边我们将url比作某个文件夹的地址,去获取网页的内容相当于从文件夹中去获取里面所存在的文件。

        /**
* 网络爬虫
* @param args
*/
public static void main(String[] args) {
try {
//获取链接对象
URL url = new URL("http://www.163.com");
//以下代码就是通过I/O的方式来获取网页中的数据并且转换成String类型的数据输出查看
InputStream in = url.openStream();
InputStreamReader inr = new InputStreamReader(in);
BufferedReader buffer = new BufferedReader(inr);
while(buffer.readLine()!=null){
System.out.println(buffer.readLine());
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

但是由于网络环境,代码量等原因我们可以使用HttpClient类来优化代码

HttpClient是客户端类,你可以把它当做一个浏览器来看,下面是代码模块

Get方式,在使用Get方式的时候你想传入对应的参数可以通过www.xxxxxx.com?ee=xx链接的方式来进行参数的传入

/**
* 网络爬虫
* @param args
*/
public static void main(String[] args) {
//用过get方式来进行数据的抓取
//创建客户端类
HttpClient httpClient  = new HttpClient();
//给他对应的链接地址和传输方式为Get
GetMethod getMethod = new GetMethod("http://www.xiangxuntrack.com/mainweb");
try {
//此时这边有个状态码大家有兴趣可以查下
int statusCode = httpClient.executeMethod(getMethod);
System.out.println(statusCode);
//输出抓取到的信息
System.out.println("response="+getMethod.getResponseBodyAsString());
} catch (HttpException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
//当然关闭操作必须有
getMethod.releaseConnection();
}

}

Post方式  可以自己添加参数名和参数值

//用过post方式来进行数据的抓取
//创建客户端类
HttpClient httpClient  = new HttpClient();
//给他对应的链接地址和传输方式为post
PostMethod postMethod = new PostMethod("http://www.xiangxuntrack.com/mainweb/indexT");
//如果一个参数不要数组
//NameValuePair data = new NameValuePair("billNum", "2");
//如果多个参数,使用数组
NameValuePair[] data = new NameValuePair[1];
try {
data[0]=new NameValuePair("billNum", "2");
//如果一个参数
//postMethod.addParameter(data);
//如果多个参数调用的方法有差别
postMethod.addParameters(data);
//此时这边有个状态码大家有兴趣可以查下
int statusCode = httpClient.executeMethod(postMethod);
System.out.println(statusCode);
//输出抓取到的信息
System.out.println("response="+postMethod.getResponseBodyAsString());
} catch (HttpException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
//当然关闭操作必须有
postMethod.releaseConnection();
}


当然具体结果大家可以自己去试验一下。





0 0
原创粉丝点击