首先,需要采集北京市政百姓信件内容,通过网络爬虫,找到有用的信息。
网络爬虫由控制节点、爬虫节点、资源库构成。
网络爬虫中可以有多个控制节点,每个控制节点下可以有多个爬虫节点,控制节点之间可以互相通信,同时,控制节点和其下的各爬虫节点之间也可以进行互相通信,属于同一个控制节点下的各爬虫节点间,亦可以互相通信。
控制节点,也叫作爬虫的中央控制器,主要负责根据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(); } }