今天,写了个小代码。抓取首页中的极客头条。效果如图:
分享给新手朋友。
要点:
1. 使用Apache HttpClient库实现GET请求。
2. 异步请求处理。
3. 正则表达式抓取自己需要的数据。
1. 使用Apache HttpClient库实现GET请求。
使用Apache只需简单三步
HttpClient httpClient = new DefaultHttpClient(); //创建一个HttpClientHttpGet httpGet = new HttpGet(“http://www.csdn.net/”); //创建一个GET请求HttpResponse response = httpClient.execute(httpGet); //发送GET请求,并响应内容
2. 异步请求处理。
异步请求的实现也很简单,开辟新线程执行请求处理,请求完成通过Handler在主线程处理所获得的数据。具体看代码。
3. 正则表达式抓取自己需要的数据。
这个更简单,我推荐一个工具RegexTester,使用方法在相关文档。
我这里说下,就算你什么正则表达式一点都不知道,你只要知道(.*?)就可以了。它可以让你抓取基本上所有你需要的数据。
".*?"注意是三个字符一起,代表贪婪匹配任意数量的任意字符。可以简单的理解为任何字符。
如"a.*?b"对字符串"eabcd",进行匹配,将找到"abcd",其中".*?"匹配"bc"。
我们需要抓取的内容一般用"(.*?)"表示,注意这里是包含括号的。这很重要,用括号表示我们要提取的内容。
我们具体分析CSDN首页源代码,下面每步操作都应该在RegexTester测试进行。
很容易找到,我们要抓取内容的毎一条是如下格式。
宇宙员在太空中如何洗澡、睡觉、上厕所?
我们要抓取的内容是标题 和 URL地址。都用(.*?)代替
\1
对比上面,我们要抓取的内容都用(.*?)代替,这里“\1 ”是代表第一个(.*?)的内容。他们是重复内容。
同理如果我们用“\2”将代表与第二个括号相同内容。这里我们没有使用。
用工具测试通过,发现没问题,能找出。
再简化,我们删去一些对定位无关紧要的内容,这步简化要测试,保证匹配内容同上。
title="(.*?)" href="(.*?)" target="_blank" οnclick="LogClickCount(this,363)
我们发现target="_blank" οnclick="LogClickCount(this,在其他地方也有,是不能区分的内容的匹配词,我们用.*?忽略。注意,不用括号,用括号是我们提取的内容。最后我们得到一个特征字串,通过下面特征字串可以在源码众多的字符中,
提取我们要的内容。
title="(.*?)" href="(.*?)".*?363
注意如上内容要在作为代码字符串,要经过一点处理,在每个"引号前加“\",
"title=\"(.*?)\" href=\"(.*?)\".*?363"
在代码中是一段很短的代码:
Pattern p = Pattern.compile("title=\"(.*?)\" href=\"(.*?)\".*?363");Matcher m = p.matcher(csdnString); //csdn首页的源代码字符串while (m.find()) { //循环查找匹配字串 MatchResult mr=m.toMatchResult(); Map map = new HashMap(); map.put("title", mr.group(1));//找到后group(1)是表达式第一个括号的内容 map.put("url", mr.group(2));//group(2)是表达式第二个括号的内容 result.add(map);}
具体代码如下:
public class MainActivity extends ListActivity {ListView listview;Handler handler;List
相关文档:
正则表达式30分钟入门教程 http://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html
- Android控件之AutoCompleteTextView(自动匹配输入的内容)
- Android模拟器镜像介绍
- Android网络通信库Volley简介(Google IO 2013)
- Android设备上使用WiFinspect抓取网络通讯包
- Android控件之HorizontalScrollView 去掉滚动条
- Android(安卓)Rxjava和retrofit
- 判断Http请求由手机端发起,还是有电脑端发起
- Android中关于Volley的使用(三)认识 CacheDispatcher
- Android(安卓)控件备用收集
随机推荐
-
Android根据Data匹配隐式Intent的实例
-
android使用http协议实现文件的上传
-
library里面使用butterknife的正确姿势(an
-
android OpenGL ES 2.0
-
android 数据库操作异常
-
如何打包Android(安卓)Wearable 应用程序
-
第三章 Libgdx必备工具
-
Android(安卓)studio 升级3.1.2, 运行之前
-
Android零散收集
-
安卓学习笔记(一)搭建安装开发环境(android