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

今天webmaigic爬虫又学了一个小技巧,想要自己设计保存爬取内容形式,可以不用重写Pipeline,在process()方法中写上,你想要的保存操作,多数情况可以达到相同的效果,我的爬虫程序,想要将内容保存在一个txt中,就是这么实现的,个人感觉简单很多,也是看了网上的高手的文章,才学到了这个技巧,受益匪浅。

爬虫北京政府信件到此就完成完成了,全部代码如下,我的保存特点为以空格隔开不同的信息,方便导入数据库:

package my.webmagic2;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Request;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.model.HttpRequestBody;
import us.codecraft.webmagic.pipeline.FilePipeline;
import us.codecraft.webmagic.processor.PageProcessor;
import us.codecraft.webmagic.scheduler.FileCacheQueueScheduler;
import us.codecraft.webmagic.utils.HttpConstant;

public class text implements PageProcessor{
    public static int h=1;
    private Site site=Site.me().setRetrySleepTime(3).setSleepTime(100);
    public int check=0;
    /**
     * @param args
     */
    public Site getSite() {
        // TODO Auto-generated method stub
        return site;
    }
    public void process(Page page) {
        // TODO Auto-generated method stub
        if(check==0){
            check++;
            String[] str1=page.getHtml().regex("\"letter_type\":\"[^,]+").all().toString().split(",");
            String[] str2=page.getHtml().regex("\"original_id\":\"[^,]+").all().toString().split(",");
            int len1,len2;
            for(int i=0;i<str1.length-1;i++){
                len1=str1[i].length()-1;
                str1[i]=str1[i].substring(16,len1);
                len2=str2[i].length()-1;
                str2[i]=str2[i].substring(16,len2);
            }
            str1[str1.length-1]= str1[str1.length-1].substring(16,str1[str1.length-1].length()-2);
            str2[str2.length-1]= str2[str2.length-1].substring(16,str2[str2.length-1].length()-2);
            for(int i=0;i<str2.length;i++){
                if(str1[i].equals("咨询")){
                    page.addTargetRequest("http://www.beijing.gov.cn/hudong/hdjl/com.web.consult.consultDetail.flow?originalId="+str2[i]);
                 }
                 else if(str1[i].equals("建议")){
                     page.addTargetRequest("http://www.beijing.gov.cn/hudong/hdjl/com.web.suggest.suggesDetail.flow?originalId="+str2[i]);
                 }
                 else if(str1[i].equals("投诉")){
                     page.addTargetRequest("http://www.beijing.gov.cn/hudong/hdjl/com.web.complain.complainDetail.flow?originalId="+str2[i]);
                 }
                 else{
                     page.addTargetRequest("http://www.beijing.gov.cn/hudong/hdjl/com.web.complain.complainDetail.flow?originalId="+str2[i]);
                 }
            }
        }
        else{
            File file=new File("/home/hadoop/xinjian");
            try {
                FileWriter w=new FileWriter(file,true);
            if(page.getHtml().xpath("/html/body/div[2]/div/div[2]/div[1]/div[1]/div[2]/strong").toString()!=null){
                String hf=page.getHtml().xpath("/html/body/div[2]/div/div[2]/div[2]/div/div[1]/div[2]").toString();
                hf=hf.replace("<div class=\"col-xs-12 col-md-12 column p-4 text-muted my-3\">","" );
                hf=hf.replace("</div>", "");
                hf=hf.replaceAll("&nbsp;", "");
                hf=hf.replaceAll("<p>", "");
                hf=hf.replaceAll("</p>","");
                hf=hf.replaceAll(" ", "");
                hf=hf.replaceAll("\n", "");
                w.write(page.getHtml().xpath("/html/body/div[2]/div/div[2]/div[1]/div[1]/div[2]/strong/text()").toString().replaceAll(" ","")
                        +" "
                        +page.getHtml().xpath("/html/body/div[2]/div/div[2]/div[1]/div[2]/div[1]/text()").toString().substring(4).replaceAll(" ","")
                        +" "
                        +page.getHtml().xpath("/html/body/div[2]/div/div[2]/div[1]/div[2]/div[2]/text()").toString().substring(3).replaceAll(" ","")
                        +" "
                        +page.getHtml().xpath("/html/body/div[2]/div/div[2]/div[1]/div[2]/div[3]/label/text()").toString().replaceAll(" ","")
                        +" "
                        +page.getHtml().xpath("/html/body/div[2]/div/div[2]/div[1]/div[3]/text()").toString().replaceAll(" ","")
                        +" "
                        +page.getHtml().xpath("/html/body/div[2]/div/div[2]/div[2]/div/div[1]/div[1]/div[2]/text()").toString().replaceAll(" ","")
                        +" "
                        +page.getHtml().xpath("/html/body/div[2]/div/div[2]/div[2]/div/div[1]/div[1]/div[3]/text()").toString().substring(5).replaceAll(" ","")
                        +" "
                        +hf
                        +"\n"
                            );
                w.close();
                h++;
            }else if(page.getHtml().xpath("/html/body/div[2]/div/div[2]/form/div[1]/div[1]/div[2]/strong").toString()!=null){
                String hf=page.getHtml().xpath("/html/body/div[2]/div/div[2]/form/div[2]/div/div[1]/div[2]").toString();
                hf=hf.replace("<div class=\"col-xs-12 col-md-12 column p-4 text-muted my-3\">","" );
                hf=hf.replace("</div>", "");
                hf=hf.replaceAll("&nbsp;", " ");
                hf=hf.replaceAll("<p>", "");
                hf=hf.replaceAll("</p>","");
                hf=hf.replaceAll(" ", "");
                hf=hf.replaceAll("\n", "");
                w.write(
                        page.getHtml().xpath("/html/body/div[2]/div/div[2]/form/div[1]/div[1]/div[2]/strong/text()").toString().replaceAll(" ","")
                        +" "
                        +page.getHtml().xpath("/html/body/div[2]/div/div[2]/form/div[1]/div[2]/div[1]/text()").toString().substring(4).replaceAll(" ","")
                        +" "
                        +page.getHtml().xpath("/html/body/div[2]/div/div[2]/form/div[1]/div[2]/div[2]/text()").toString().substring(3).replaceAll(" ","")
                        +" "
                        +page.getHtml().xpath("/html/body/div[2]/div/div[2]/form/div[1]/div[2]/div[3]/label/text()").toString().replaceAll(" ","")
                        +" "
                        +page.getHtml().xpath("/html/body/div[2]/div/div[2]/form/div[1]/div[3]/text()").toString().replaceAll(" ","")
                        +" "
                        +page.getHtml().xpath("/html/body/div[2]/div/div[2]/form/div[2]/div/div[1]/div[1]/div[2]/text()").toString().replaceAll(" ","")
                        +" "
                        +page.getHtml().xpath("/html/body/div[2]/div/div[2]/form/div[2]/div/div[1]/div[1]/div[3]/text()").toString().substring(5).replaceAll(" ","")
                        +" "
                        +hf
                        +"\n"
                            );
                w.close();
                h++;
            }else{
                page.putField("all", page.getHtml().toString());
                w.close();
            }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        int j=0;
        for(int i=0;i<=5586;i++){
            j=i*6;
            // TODO Auto-generated method stub
            Request request = new Request("http://www.beijing.gov.cn/hudong/hdjl/com.web.search.mailList.replyMailList.biz.ext");
            request.setMethod(HttpConstant.Method.POST);
            request.setRequestBody(HttpRequestBody.json("{‘PageCond/begin‘:"+j+",‘PageCond/length‘:6,‘PageCond/isCount‘:‘true‘,‘keywords‘:‘‘,‘orgids‘:‘‘,‘startDate‘:‘‘,‘endDate‘:‘‘,‘letterType‘:‘2‘,‘letterStatue‘:‘‘}","utf-8"));
            Spider.create(new text())
            .addRequest(request)            .addPipeline(new FilePipeline("./xinjian/"))
            .setScheduler(new FileCacheQueueScheduler("./xinjian/"))
            .thread(5)
            .run();
            System.out.println("完成"+i);
        }
        System.out.println("全部完成");
    }

}

原文地址:https://www.cnblogs.com/my---world/p/12313824.html

时间: 2024-08-30 09:00:53

大三上寒假15天--第15天的相关文章

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

学习于林子雨<大数据技术原理与应用>教材配套大数据软件安装和编程实践指南 一. 安装spark 第一步,spark下载(http://spark.apache.org/downloads.html) 第二步,spark压缩包解压 sudo tar -zxf ~/下载/spark-1.6.2-bin-without-hadoop.tgz -C /usr/local/ 第三步,解压后文件夹改名为spark cd /usr/local sudo mv ./spark-1.6.2-bin-withou

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

学习于大数据原理与应用 第十六章 Spark 学习指南 三.独立应用程序编程 2.Scala应用程序代码 cd ~           # 进入用户主文件夹 mkdir ./sparkapp        # 创建应用程序根目录 mkdir -p ./sparkapp/src/main/scala     # 创建所需的文件夹结构 vim ./sparkapp/src/main/scala/SimpleApp.scala #在 ./sparkapp/src/main/scala 下建立一个名为

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

今天继续学习webmagic爬虫技术,组件包含: 1.Downloader Downloader负责从互联网上下载页面,以便后续处理.WebMagic默认使用了Apache HttpClient作为下载工具. 2.PageProcessor PageProcessor负责解析页面,抽取有用信息,以及发现新的链接.WebMagic使用Jsoup作为HTML解析工具,并基于其开发了解析XPath的工具Xsoup. 在这四个组件中,PageProcessor对于每个站点每个页面都不一样,是需要使用者定

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

今天依旧学习了webmagic爬虫,发现昨天爬取的网址不对,内容也不对,重新找了一个网址爬取,重新整理了思路,发现这个网址,分为三种类型的链接,建议,咨询和一个什么记不清了,需要先判断类型,然后才能分配Id,然后加入url队列. 这个网址的一大难点,就是分页是一个POST传值,然后动态的修改了网页内容,所以今天重新学习了,通过POST获取内容,收益匪浅,忙活了一天,忘记写博客了,很晚了所以就写这么多吧. 另外附上学习的网址,讲的很好 关键代码为: Request request = new Re

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

昨天的下载完成后运行报错,应该是下载的spark版本和教程不符合,然后pom.xml文件中的spark-core内容而应该不同,但是我还是用的教程导致,现在正在尝试安装教程给的网站找的内容又下载中,不知道这次又要下载多久.(我下载的是spark 2.4.4) <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0&qu

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

今天继续学习webmagic爬虫 通过老师给的学习资料学习后,对webmagic爬虫基本有了了解,当时对site方法有点模糊,今天也终于搞明白了,感觉就像模拟了一个用户一样,对一个网站的框架还是不是很了解,所以还是不太理解,那些cookie,host,UserAgent,和header是什么,不过我以后会搞明白,今天准备进行编码实际练习,进行一个网站的爬取. 这是爬取前十页信件目录一样的网页,还不清楚怎么获取信件内容url,我会继续努力 package my.webmagic; import u

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

今天继续学习webmagic 已经可以爬取出目录和跳转去信件的页面,不知道是一直有还是后来加的,现在好像多了哥跳转中页面,目录给的链接不是直接的信件页面,所以我还需要再加一条爬取跳转中页面的提供的url然后访问,才可以爬取信件内容,但是不知道是正则表达式的问题还是什么,总之爬取不到想要的url一直是null,爬取到的为: url: http://www.beijing.gov.cn/so/view?qt=%E4%BF%A1%E4%BB%B6&location=2&reference=5BE

大三上的总结(-----坚持走完了自己想走的路-----微笑---------)

(⊙v⊙)嗯,这天是第15周的周末的早晨八点. 为什么突然要写一篇这样柔软的文章来描述自己的大三生活呢? ->_->  因为又到期末啦! 该总结一下自己的脑瓜里学会啥了? 噗,先说点acmer的事吧! 西安赛区小小的回忆,来一首<回忆>---白智英,嗯,优美的调调,西安赛区一战,让我想了很多很多,从寒假集训,到暑假集训,为此放弃了自己休息的时间,而呆在实验室鏖战的ACMer,以及陈老师对我时不时送来的水果和时不时来看望我们,以及学校领导的重视. 深深的知道这一次现场赛来的有多么不容

大三上------期末总结

今天终于把万恶的期末考试给考完了!想想考的都是专业课,原本以为肯定会复习地很开心.因为不用像以前一样只是考试前一周什么都不会,然后考前疯狂地看书刷题,考完之后瞬间遗忘.不过事实证明...为了考试看书还是非常痛苦...即使是喜欢的算法,C++,操作系统....不过幸好已经考完啦!接下来为期四周的寒假又不用为考试而学习了! 大三上这一个学期接触的主要的东西依旧还是底层的系统和算法吧.在开学的第一个月把<UNIX环境高级编程>看了一遍,而且是英文原版的.要说真的学到了什么,其实没有,因为这本书更像是