大三上寒假15天--第13天

经过今天的摸索,终于完成了首都之窗信件的爬取代码,昨天的代码共有两处错误导致无法达到爬取目的。

  1. page.addTargetRequests(page.getHtml().link().regex().all());应该为:page.addTargetRequests(page.getHtml().regex("http://www.beijing.gov.cn/hudong/hdjl/com.web.\\S+.\\S+.flow\\?originalId=[^\"]+").all());具体原因不知我猜测可能是因为一个在a标签中的href是link而另一个在js的location.href中不为link在网上也没有查到解释的,后面我会继续去寻找,找到这个错误是真的很不容易啊,真的是一点点试出来的。
  2. 正则表达式"http://www.beijing.gov.cn/hudong/hdjl/com.web.\\S+.\\S+.flow\\?originalId=\\S+[^\"]"应该为:"http://www.beijing.gov.cn/hudong/hdjl/com.web.\\S+.\\S+.flow\\?originalId=[^\"]+"前一个我发现爬取后网址后面跟有“;然后上不去网址所以爬取不到,后一个才是正确表达。

以下为全部代码:

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().setRetrySleepTime(3).setSleepTime(100);
    /**
     * @param args
     */
    public Site getSite() {
        // TODO Auto-generated method stub
        return site;
    }

    public void process(Page page) {
        // TODO Auto-generated method stub
        page.putField("allhtml",page.getHtml().toString());
        String urlstr=null;
    for(int i=2;i<=50;i++){
            urlstr="http://www.beijing.gov.cn/so/s?qt=%E4%BF%A1%E4%BB%B6&tab=all&siteCode=1100000088&page="+i;
            page.addTargetRequest(urlstr);
    }
    page.addTargetRequests(page.getHtml().links().regex("view\\S+8").all());
    page.addTargetRequests(page.getHtml().regex("http://www.beijing.gov.cn/hudong/hdjl/com.web.\\S+.\\S+.flow\\?originalId=[^\"]+").all());
    System.out.println(page.getHtml().regex("http://www.beijing.gov.cn/hudong/hdjl/com.web.\\S+.\\S+.flow\\?originalId=[^\"]+").all());
        }
    public static void main(String[] args) {
        Spider.create(new Getgov())
        .addUrl("http://www.beijing.gov.cn/so/s?qt=%E4%BF%A1%E4%BB%B6&tab=all&siteCode=1100000088&page=1")
        .addPipeline(new FilePipeline("./"))
        .setScheduler(new FileCacheQueueScheduler("./"))
        .thread(5)
        .run();
        System.out.println("完成");
  }
}

到此爬取首都之窗信件任务完成,相信明天可以很快完成新型管状病毒信息收集,然后再完成信息处理,

猜你喜欢

转载自www.cnblogs.com/my---world/p/12306031.html