【Android 我的博客APP】1.抓取博客首页文章列表内容——网页数据抓取

打算做个自己在博客园的博客APP,首先要能访问首页获取数据获取首页的文章列表,第一步抓取博客首页文章列表内容的功能已实现,在小米2S上的效果图如下:

技术分享

 

思路是:通过编写的工具类访问网页,获取页面源代码,通过正则表达式得到匹配的数据进行处理显示到ListView上

 

简单说明下要点:
1. 使用Apache HttpClient库实现GET请求。
2. 异步请求处理。
3. 正则表达式抓取自己需要的数据。

 

使用Apache HttpClient库实现GET请求。

使用Apache只需简单三步

1 HttpClient httpClient = new DefaultHttpClient();  //创建一个HttpClient  
2   
3 HttpGet httpGet = new HttpGet(“http://www.cnblogs.com/yc-755909659/”); //创建一个GET请求  
4   
5 HttpResponse response = httpClient.execute(httpGet); //发送GET请求,并响应内容

 

异步请求处理

异步请求的实现也很简单,开辟新线程执行请求处理,请求完成通过Handler在主线程处理所获得的数据。具体看源代码中MainActivity.java 类代码。

 

正则表达式抓取自己需要的数据

访问我的博客主页查看网页源代码,很容易找到要抓取文章列表内容的格式都如下:

<div class="postTitle">
                <a id="homepage1_HomePageDays_DaysList_ctl00_DayList_TitleUrl_0" class="postTitle2" href="http://www.cnblogs.com/yc-755909659/p/4187155.html">【读书笔记《Android游戏编程之从零开始》】19.游戏开发基础(游戏音乐与音效)</a>
            </div>
            <div class="postCon"><div class="c_b_p_desc">摘要: 在一款游戏中,除了华丽的界面 UI 直接吸引玩家外,另外重要的就是游戏的背景音乐与音效;合适的背景音乐以及精彩的音效搭配会令整个游戏上升一个档次。在 Android 中。常用于播放游戏背景音乐的类是 MediaPlayer, 而用于游戏音效的则是 SoundPool 类。1. MediaPlayer...<a href="http://www.cnblogs.com/yc-755909659/p/4187155.html" class="c_b_p_desc_readmore">阅读全文</a></div></div>
            <div class="clear"></div>
            <div class="postDesc">posted @ 2014-12-30 12:16 Y灬叶超 阅读(45) 评论(0)  <a href ="http://i.cnblogs.com/EditPosts.aspx?postid=4187155" rel="nofollow">编辑</a></div>
            <div class="clear"></div>

因此,得到正则表达式如下:

"class=\"postTitle2\" href=\"(.*?)\">(.*?)</a>.*?摘要:(.*?)<a.*?posted @(.*?)Y灬叶超 阅读(.*?) 评论(.*?)<a";

然后通过正则表达式得到匹配的数据,获取需要的数据

/**
     * 联网获得数据
     * 
     * @return 数据
     */
    public static List<BlogListInfo> getBlogNetDate(String path, String regex) {
        List<BlogListInfo> result = new ArrayList<BlogListInfo>();
        String blogString = RemoveRN(http_get(path));
        Pattern p = Pattern.compile(regex);
        // 我的博客首页的源代码字符串
        Matcher m = p.matcher(blogString);
        while (m.find()) {// 循环查找匹配字串
            MatchResult mr = m.toMatchResult();
            BlogListInfo info = new BlogListInfo();
            info.setBlogUrl(mr.group(1));
            info.setBlogTitle(mr.group(2));
            info.setBlogSummary(mr.group(3));
            info.setBlogTime(mr.group(4));
            info.setBlogReadNum(mr.group(5));
            info.setBlogReply(mr.group(6));
            result.add(info);
        }
        return result;
    }

原文地址:http://www.cnblogs.com/yc-755909659/p/4195436.html

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。