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

【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=http://www.mamicode.com/"(.*?)\">(.*?)</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

 

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