一、垂直搜索介绍
1、垂直搜索--即需要抓去大量的网页,分析其中的数据。垂直搜索更着重于正文内容模式分离,数据调整,相关链接分析,是一种结构化分析过程。
2、垂直搜索技术主要分为两个层次:模版级和网页库级
3、模版级是针对网页进行模版设定或者自动生成模版的方式抽取数据,对网页的采集也是针对性的采集,适合规模比较小、信息源少且稳定的需求,优点是快速实施、成本低、灵活性强,缺点是后期维护成本高,信息源和信息量小。
4、网页库级和模版方式最大的区别是对具体网页不依赖,可针对任意正常的网页信息采集信息抽取。缺点是其灵活性差、成本高。
垂直搜索大致需要以下技术:
1、信息采集技术
2、网页信息抽取技术
3、信息的处理技术(重复识别、聚类、比较、分析等)
4、语意相关性分析
5、分词
6、索引
二、使用HttpClient采集页面
1、HTTPClient项目就是专门设计来简化HTTP客户端与服务器进行各种通讯编程。
2、HTTPClient是基于HttpCore实现的一个HTTP/1.1兼容HTTP客户端,它提供了一系列可重用的客户端身份验证、HTTP状态保持、HTTP链接管理module。功能丰富的HTTPClient同时兼具出色的可拓展性和健壮性,目前已经成为了最为流行的JavaHttp客户端组件,为开发Web浏览器、WebService客户端提供了很大的便利。
下载地址: http://hc.apache.org/downloads.cgi
使用HttpClient
一般情况下,使用HttpClient需要以下5个步骤:
1、创建HttpClient的实例
2、创建某种连接方法的实例,在这里是最常见的是Get和Post
3、调用第一步中创建好的HttpClient实例的execute方法,得到执行结果
4、释放连接
5、对得到后的内容进行处理
下面来看两个抓去网页的实例
1、抓取搜索后的页面然后保存
package com.qianyan.test;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
public class TestHttpClient {
public static void main(String[] args) throws ClientProtocolException, IOException {
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("http://www.baidu.com/s?wd=java");
HttpResponse response = httpClient.execute(httpGet);
HttpEntity entity = response.getEntity();
InputStream ins = entity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(ins));
FileWriter writer = new FileWriter(new File("E:/baidu.htm"));
String strLine = reader.readLine();
while (null != strLine) {
writer.write(strLine);
strLine = reader.readLine();
}
writer.close();
ins.close();
reader.close();
httpClient.getConnectionManager().shutdown();
System.out.println("网页生成完毕!");
}
}
1、抓取搜索后的页面打印出来
package com.qianyan.test;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.