2018-01-05
主要工作
选取首页中的超链接,利用布隆容器去重,将最终需要的网页选取出来,用前几节课学习的方法将需要的信息抓取出来并且存放到数据库中。
具体工作
1、初始页面
在myeclipse中输入选取的首页2、用jsoup模拟浏览器
代码如下:
网页的头请求 用jsoup模拟浏览器3、初始化三个容器
作用 :1、布隆容器去重,检测网页的唯一性。2、list容器存放中间页面。3、存放最终页面。
代码如下:
public static BloomFilter bloomFilter = new BloomFilter();//第一个容器,布隆过滤器,检查网页的唯一性public static ListfinalUrl = new ArrayList();//第二个容器,存放最终网页public static ListmiddleUrl = new ArrayList();//第三个容器,存放中间网页
4、解析网页取出所有包含href属性的a标签放到Elements
Elements urls = doc.select("a[href]")
5、遍历Elements取出每个Element里面的href属性
for (int i = 0; i < urls.size(); i++) {
urlFilter(urls.get(i).attr("href"));
}
6、处理URL
1、过滤三个容器
2、存放到对应的容器内
(编写对应的正则表达式,将网址正确的存放到容器内)
private static void urlFilter(String url) {
//取出不包括JavaScript的网页
if(!url.contains("Javascript")){
//取出包含http同时包含"首页"的网址
if(url.contains("http:")&&url.contains(ZLZP_URL)){
if(bloomFilter.contains(url)){
bloomFilter.addValue(url);
//将网址放到对应的容器中
middleUrl.add(url);
}
}
else if(!url.contains("http:")){
if(!bloomFilter.contains(ZLZP_URL+url)){
bloomFilter.addValue(ZLZP_URL+url);
middleUrl.add(ZLZP_URL+url);
}
}
//编写对应的正则表达式
public static void saveUrl(String url){
if(!bloomFilter.contains(url)){
bloomFilter.addValue(url);
String patternFinal = "^.+\\d+.$";
if(Pattern.matches(patternFinal, url)){
finalUrl.add(url);
}else{
middleUrl.add(url);
}
}
}
7、循环中间页面容器,处理中间页面
重复6-7步直到最终页面容器达到要求,网页全部被抓取
for (int i = 0; i < middleUrl.size(); i++) {
System.out.println("处理中间页面===="+middleUrl.get(i));
Document doc1 = getDocument(middleUrl.get(i));
Elements urls1 = doc1.select("a[href]");
for (int t = 0; t < urls1.size(); t++) {
String furl = urls1.get(t).attr("href").replace("#" ,"");//将抓取的网页最后有#的去除
urlFilter(furl);
}
if(finalUrl.size()<15000){
break;
}
}
8、循环最终容器,抓取需要获取的信息,利用JDBC存放到数据库中
for (String url : finalUrl) {
System.out.println(url);
}