本项目实现的是:自己写一个网络爬虫,对搜狐(或者csdn)爬取新闻(博客)标题,然后把这些新闻标题和它的链接地址上传到hdfs多个文件上,一个文件对应一个标题和链接地址,然后通过分词技术对每个文件中的标题进行分词,分词后建立倒排索引以此来实现搜索引擎的功能,建立倒排索引不熟悉的朋友可以看看我上篇博客
Hadoop–倒排索引过程详解
首先 要自己写一个网络爬虫
由于我开始写爬虫的时候用了htmlparser,把所有搜到的链接存到队列,并且垂直搜索,这个工作量太大,爬了一个小时还没爬完造成了我电脑的死机,所以,现在我就去掉了垂直搜索,只爬搜狐的主页的新闻文章链接
不多说,看代码
首先看下载工具类,解释看注释
package com.yc.spider;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 下载工具类
* @author 汤高
*
*/
public class DownLoadTool {
/**
* 下载页面的内容
* 就是根据地址下载整个html标签
*
* @param addr
* @return
*/
public String downLoadUrl(final String addr) {
StringBuffer sb = new StringBuffer();
try {
URL url;
if(addr.startsWith("http://")==false){
String urladdr=addr+"http://";
url = new URL(urladdr);
}else{
System.out.println(addr);
url = new URL(addr);
}
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setConnectTimeout(5000);
con.connect();
if (con.getResponseCode() == 200) {
BufferedInputStream bis = new BufferedInputStream(con
.getInputStream());
Scanner sc = new Scanner(bis,"gbk");
while (sc.hasNextLine()) {
sb.append(sc.nextLine());
}
}
} catch (IOException e) {
e.printStackTrace();
}
return sb.toString();
}
}
然后看一个文章链接的匹配类
package com.yc.spider;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Scanner;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 文章下载类
*
* @author 汤高
*
*
*/
public class ArticleDownLoad {
/**
* 取出文章的a标记href
*/
static String ARTICLE_URL =