zoukankan      html  css  js  c++  java
  • 大三上寒假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中的相同的啊,明天我会继续研究。

  • 相关阅读:
    Socket网络通信之数据传递
    多线程中join()的用法
    JAVA多线程实现的三种方式
    通过读取配置文件,启动mongodb
    利用ajax获取网页表单数据,并存储到数据库之二(使用SSH)
    利用ajax获取网页表单数据,并存储到数据库之一(使用JDBC)
    Null reference pointer was passed to the stub when not debugging with IE
    代码生成了解
    Linq to sql 入门
    SharePoint 2013 入门
  • 原文地址:https://www.cnblogs.com/my---world/p/12301796.html
Copyright © 2011-2022 走看看