首先,需要采集北京市政百姓信件内容,通过网络爬虫,找到有用的信息。

网络爬虫由控制节点、爬虫节点、资源库构成。

网络爬虫中可以有多个控制节点,每个控制节点下可以有多个爬虫节点,控制节点之间可以互相通信,同时,控制节点和其下的各爬虫节点之间也可以进行互相通信,属于同一个控制节点下的各爬虫节点间,亦可以互相通信。

控制节点,也叫作爬虫的中央控制器,主要负责根据URL地址分配线程,并调用爬虫节点进行具体的爬行。

爬虫节点会按照相关的算法,对网页进行具体的爬行,主要包括下载网页以及对网页的文本进行处理,爬行后,会将对应的爬行结果存储到对应的资源库中。

WebMagic是一个简单灵活的Java爬虫框架。基于WebMagic,你可以快速开发出一个高效、易维护的爬虫。

WebMagic的设计参考了业界最优秀的爬虫Scrapy,而实现则应用了HttpClient、Jsoup等Java世界最成熟的工具,目标就是做一个Java语言Web爬虫的教科书般的实现。

import us.codecraft.webmagic.Page;  
import us.codecraft.webmagic.Site;  
import us.codecraft.webmagic.processor.PageProcessor;  
  
public class Getgov implements PageProcessor {  
  
    @Override  
    public Site getSite() {  
        return null;  
    }  
  
    @Override  
    public void process(Page arg0) {  
    }  
} 
package my.webmagic;  
import us.codecraft.webmagic.Page;  
import us.codecraft.webmagic.Site;  
import us.codecraft.webmagic.Spider;  
import us.codecraft.webmagic.pipeline.FilePipeline;  
import us.codecraft.webmagic.processor.PageProcessor;  
import us.codecraft.webmagic.scheduler.FileCacheQueueScheduler;  
public class Getgov implements PageProcessor {  
    private Site site = Site.me().setRetryTimes(3).setSleepTime(100);  
    public void process(Page page) {  
        page.putField("allhtml", page.getHtml().toString());  
        String urlstr null;  
        for (int i = 1; i < 2702; i++) {  
            urlstr = "http://rexian.beijing.gov.cn/default/com.web.index.moreNewLetterQuery.flow?PageCond/currentPage="  
                    + i + "&type=nextPage";  
            page.addTargetRequest(urlstr);  
            page.addTargetRequests(page.getHtml().links()  
                    .regex("(com.web.\\w+.\\w+.flow\\?originalId=\\w+)").all());  
        }  
    }  
    public Site getSite() {  
        return site;  
    }  
    public static void main(String[] args) {  
        Spider.create(new Getgov())  
                .addUrl("http://rexian.beijing.gov.cn/default/com.web.index.moreNewLetterQuery.flow?type=firstPage")  
                .addPipeline(new FilePipeline("/data/edu1"))  
                .setScheduler(new FileCacheQueueScheduler("/data/edu1"))  
                .thread(5)  
                .run();  
    }  
}