初学网络爬虫
来源:互联网 发布:热血沸腾的音乐知乎 编辑:程序博客网 时间: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();
}
当然具体结果大家可以自己去试验一下。
- 初学网络爬虫
- python-网络爬虫初学三:网络异常的捕获
- 网络爬虫初探(初学阶段性总结&未来发展窥探)
- python-网络爬虫初学四:cookie的存储与读取
- 【笔记】1、初学python3网络爬虫——环境配置
- 【笔记】2、初学python3网络爬虫——爬虫的基本原理
- python爬虫初学(2)
- 初学python,爬虫开刀
- 初学python爬虫
- 1. 初学python爬虫
- 初学Scrapy爬虫
- 初学python爬虫
- python爬虫初学
- 网络初学
- 初学网络
- python-网络爬虫初学一:获取网页源码以及发送POST和GET请求
- python-网络爬虫初学二:headers的设置和一些高级特性
- python-网络爬虫初学二:headers的设置和一些高级特性
- Android最佳性能实践(二)——分析内存的使用情况
- Android Libraries
- 【题】【动规、字符串(KMP)】 NKOJ 2406 翻译密码子
- eclipse快速定位本地文件夹
- MarkDown简化贴图流程
- 初学网络爬虫
- 机器学习之1.1——kNN实践
- Runge_Kutta算法
- c语言转换成delphi程序语言
- Android最佳性能实践(三)——高性能编码优化
- android ScrollView 中子控件设置高度后不起作用的解决方法
- CoordinatorLayout调用原理源码解析
- eclipse快捷键
- Android应用之间的跳转—从一个app跳转至另一个app