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

今天继续学习webmagic

已经可以爬取出目录和跳转去信件的页面,不知道是一直有还是后来加的,现在好像多了哥跳转中页面,目录给的链接不是直接的信件页面,所以我还需要再加一条爬取跳转中页面的提供的url然后访问,才可以爬取信件内容,但是不知道是正则表达式的问题还是什么,总之爬取不到想要的url一直是null,爬取到的为:

url:    http://www.beijing.gov.cn/so/view?qt=%E4%BF%A1%E4%BB%B6&location=2&reference=5BED02004DBE50389DA483B44DF7B504&url=816D9628B2B6451D70BB05836297BD537AD9C7CA72A996F247E032FAD6786550657516097B73EA55C88868977934111E39B9144602CBA42CCAE2B1D7E84EDD3F624968D6D3B0B36D5D887A620F411AEDA9815497116468E324A03EAA90DBCC31&title=%E5%85%B3%E4%BA%8E%E4%BF%A1%E4%BB%B6%E7%BC%96%E5%8F%B7%E4%B8%BA40012481%E7%9A%84%E4%BF%A1%E4%BB%B6%E8%87%B3%E4%BB%8A%E6%9C%AA%E5%9B%9E%E5%A4%8D%E7%9A%84%E9%97%AE%E9%A2%98&tab=all&siteCode=1100000088
allhtml:    <!doctype html>
<html lang="en">
 <head> 
  <meta charset="UTF-8"> 
  <meta name="referrer" content="never"> 
  <title>跳转中......</title> 
  <script type="text/javascript">

            location.href = "http://www.beijing.gov.cn/hudong/hdjl/com.web.consult.consultDetail.flow?originalId=20026589";

</script>
 </head>  
 <body>  
 </body>

需要location.href中的http://www.beijing.gov.cn/hudong/hdjl/com.web.consult.consultDetail.flow?originalId=20026589,我的正则表达式为:http://www.beijing.gov.cn/hudong/hdjl/\\S+[^\"],一下为我的全部代码:

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=26;i<=26;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);
            System.out.println(urlstr);
            page.addTargetRequests(page.getHtml().links().regex("view\\S+8").all());
            page.addTargetRequests(page.getHtml().links().regex("http://www.beijing.gov.cn/hudong/hdjl/\\S+[^\"]").all());
            System.out.println(page.getHtml().links().regex("view\\S+8").all());
            System.out.println(page.getHtml().regex("<title>跳转中......</title>"));
    }
        }
    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=26")
        .addPipeline(new FilePipeline("./"))
        .setScheduler(new FileCacheQueueScheduler("./"))
        .thread(5)
        .run();
        System.out.println("完成");
  }
}

匹配跳转中...成功输出:

 

我想很可能是正则的问题,但是并看不出来,而且我改成http://\\S+[^\"]是可以匹配到url的所以不是[^\"]的问题,很迷茫,中间只是加上了www.beijing.gov.cn/hudong/hdjl/是和location.href中的相同的啊,明天我会继续研究。

 

posted @ 2020-02-12 23:25    阅读(226)  评论(0编辑  收藏  举报