美文网首页
2018-01-05

2018-01-05

作者: 大黄2333 | 来源:发表于2018-01-05 19:38 被阅读0次

    主要工作

    选取首页中的超链接,利用布隆容器去重,将最终需要的网页选取出来,用前几节课学习的方法将需要的信息抓取出来并且存放到数据库中。

    具体工作

    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

          本文链接:https://www.haomeiwen.com/subject/inbsnxtx.html