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);

}

你可能感兴趣的:(2018-01-05)