扒虫应用

      哈哈。这是我第一次总结自己的工作经验,之前好几次有相同的冲动,都被岁月给磨灭了。现在终于利用上班的时间写篇博客,酷言归正传。扒虫,顾名思义就是从网易、新浪、百度实时的抓取相应的信息。当然如果模块内容变化很大的话最好别太实时哦。不然人家会把你的服务器ip给拉黑的哭

     首先你需要的jar包是jsoup;如果你是用maven管理的话,可以摘抄:

         <jsoup.version>1.7.2</jsoup.version>

            <!-- jsoup HTML parser library -->

            <dependency>

                <groupId>org.jsoup</groupId>

                <artifactId>jsoup</artifactId>

                <version>${jsoup.version}</version>

            </dependency>

引入jar包之后你就可以进行抓取了

  Document doc = Jsoup.parse( new URL(url).openStream(),"utf-8" ,"") ;

        return doc;

       刚接触这个工程的时候,我很惊恐;因为需求有点让我不知所措。需求:首先得把页面上你需要的元素都抓下来(对于没怎么玩过的人,心里还真有点犯怵,结果稍微调试一下。还是很简单的。它会根据css演样式分层结构去获取元素对象的;在其中我有个问题很迷惑。小说一下。就是当例如<div  class=“clt-server style-was”,我直接就是.select("clt-server style-was"),这是没用的。因为这个div有两个样式进行控制,你只需要找到其中一个样式是唯一且唯一的tag;小啰嗦了一下。不过当时的确浪费了我些时间);如何拿到你要抓取信息的总页数,如果你有点脑子的话,你应该知道到时候会有个大大的for循环等着你;如何模拟翻页抓取信息;主要的需求难点都说完了;当时的我对于这些还是有点懵。不过我坚强且顽强的将这些东西都一一搞定了。可惜的是在我自己看来代码写的跟残疾儿童似的。稍微需求有一丁点变化的话。我肯定不知所措了;不废话了。我说下,咱的技术总监设计的思路。虽然后来看来,也很顺。但当时我可真的是无能为力;首先:拿到总页数;

        Element el = doc.select("a.(tag.class)").last();

        String pages = el.text();

        int num = Integer.parseInt(pages);

       代码核心:        for(int i=1 ;i <= pageNum ; i++){

            String page_url =  WANGYI_Url ;

            if(i > 1){

                page_url =  "*ur*l"+i+".html";

            }

            List<FreeAppDTO> pageFreeAppDtos = parsePageFreeAppDTOs(page_url) ;

            freeAppDTOs.addAll(pageFreeAppDtos);

        }

parsePageFreeAppDTOs就是一个一个的去解析你要的东西哈!抓取的内容到此结束!

之后展开的是存取的过程,可能会涉及到排行哦。。这对我说也是个蛋疼的问题。虽然存取,排行的问题我都解决了。可是和之前一样,代码写的那个挫。同上。总监思路走着:首先获取你抓取的List,将list的唯一标识,例如downLoadUrl与数据库进行匹配,如果没有的话,往数据库里面插,有的话先存着:

 FreeAppDTO freeAppDTO = freeAppDTOList.get(i) ;

 List<FreeApp>  freeApps = new ArrayList<FreeApp>();

            if(StringUtils.isEmpty(downloadUrl)){

                continue;

            }

freeApps.add(freeApp);

进行相应的通过freeApps中的顺序插入排行列表;

呵呵。写的有点乱。。。其实还有两个问题。第一个:很多链接地址都是自己网站内部映射的,如何拿到真正的下载地址;第二图片也是同样的道理,如果能把图片抓取下了并且存储;httpClient api进行相应的查找吧。。。。

猜你喜欢

转载自syc--syl.iteye.com/blog/1869647