如何去写网络爬虫
1.原理部分
在写一个爬虫之前,我们首先需要知道网络爬虫的原理,知道其原理了,写起来很是简单。
为了简单起见,我简单绘制了一个流程图。首先呢,需要输入url(需要爬取的种子节点,可能是一个,可能是多个,多个对应的是集合的形式,如list等)。
接着是使用httpclient模拟浏览器请求资源,HttpClient支持所有定义在HTTP/1.1版本中的HTTP方法:GET,HEAD,POST,PUT,DELETE,TRACE和OPTIONS。对于每个方法类型都有一个特殊的类:HttpGet,HttpHead,HttpPost,HttpPut,HttpDelete,HttpTrace和HttpOptions。最常用的方法是GET和POST。通过String entity = EntityUtils.toString (response.getEntity(),"utf-8");返回实体内容,内容为html文件。
接着是解析html文件,这里采用的是很实用且功能强大的DOM解析器——Jsoup。
最后是将Jsoup解析后的内容写入txt、或者插入到数据库或excel中,这样就完成爬虫的一个流程了。
2.HttpClient的介绍与使用
2.1 http请求
httpclient是用来模拟浏览器请求资源的,常用的请求方法是GET和POST。
2.2 http响应
HTTP响应是由服务器在接收和解释请求报文之后返回发送给客户端的报文。响应报文的第一行包含了协议版本,之后是数字状态码和相关联的文本段。正常情况下,如果成功地获得请求的资源,则返回的状态码为200,表示响应成功。如果请求的资源不存在,通常返回404错误。
常见的状态码有:
2.3 响应后的实体(html文件)
获取实体内容
String entity = EntityUtils.toString (response.getEntity(),"utf-8");
关闭流实体
EntityUtils.consume(response.getEntity());
如下是我写的一个测试实例
public class httpTest {
public static void main(String[] args) throws IOException {
HttpClient client = new DefaultHttpClient(); //初始化httpclient
String personalUrl="http://xueqiu.com/"; //指定一个种子url
HttpPost postMethod = new HttpPost(personalUrl); //post方法请求
System.out.println("postMethod====="+ postMethod+"=====");
HttpGet getMethod = new HttpGet(personalUrl); // get方法请求
System.out.println("Method======"+getMethod+"=====");
HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1,
HttpStatus.SC_OK, "OK"); //初始化response
response = client.execute(getMethod); //执行响应
System.out.println("response========"+response+"=====");
int StatusCode = response.getStatusLine().getStatusCode(); //获取响应状态码
System.out.println("StatusCode===="+StatusCode+"=====");
System.out.println(response);
if(StatusCode == 200){ //状态码200表示响应成功
//获取实体内容
String entity = EntityUtils.toString (response.getEntity(),"utf-8");
//输出实体内容
System.out.println(entity);
EntityUtils.consume(response.getEntity()); //消耗实体
}else {
//关闭HttpEntity的流实体
EntityUtils.consume(response.getEntity()); //消耗实体
}
}
}
控制台输出的内容