- 浏览: 1314908 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (132)
- android Launcher (15)
- 收藏夹 (3)
- UI设计 (28)
- J2EE (2)
- android网络编程 (8)
- 项目经理是熬出来的 (8)
- Android图像处理 (5)
- 系统层开发 (12)
- 数据库 (2)
- 程序员是熬出来的 (2)
- Android技巧 (11)
- 地图相关 (2)
- Android底层 (9)
- Android疑难杂症 (4)
- 开发工具 (4)
- 知识梳理 (8)
- 源码阅读 (7)
- Media媒体库 (5)
- 调试技术 (3)
- Android蓝牙 (3)
- 动画特效 (5)
- jni (3)
- 串口通信 (1)
- Android优化 (3)
- 架构设计 (1)
- Android Test (1)
- 翻译系列 (0)
最新评论
-
我说123木头人雪雪:
...
Android截屏并对图片做高斯模糊处理 -
ysc123shift:
没有源码。
Android截屏并对图片做高斯模糊处理 -
我de专属doll:
你那个Jni库是自己编译的还是有现成的呢?
Android media媒体库分析之:分类别统计媒体文件大小 -
zhunanfengfeimeng:
想做项目经理?这些工具必须了解 -
ls0609:
一个带人脸识别的智能照相机demohttp://blog.cs ...
Android 调用相机,获取的图片太小
如何实现从各大网抓取新闻并经过格式处理现实到我们的新闻客户端呢?
Android客户端抓取并解析网页的方法我用到的有两种:
一、用jsoup
没仔细研究,网上有类似的,可以参考这两位兄弟的:
http://decentway.iteye.com/blog/1333127
http://blog.csdn.net/hellohaifei/article/details/9352069
二、用htmlparser
我项目中就用htmlparser,抓紧并解析腾讯新闻,代码如下:
附件为用到的jar包;
关于新闻完整的新闻客户端,有需要的哥们可以留下邮箱,完整实现了新闻的抓取:
工程源码在:https://github.com/gqdy365/onlineNews
792108314
工程源码在:https://github.com/gqdy365/onlineNews,如果如法下载,留下邮箱,我发给你;
工程源码在:https://github.com/gqdy365/onlineNews
工程源码在:https://github.com/gqdy365/onlineNews
工程源码在:https://github.com/gqdy365/onlineNews
Android客户端抓取并解析网页的方法我用到的有两种:
一、用jsoup
没仔细研究,网上有类似的,可以参考这两位兄弟的:
http://decentway.iteye.com/blog/1333127
http://blog.csdn.net/hellohaifei/article/details/9352069
二、用htmlparser
我项目中就用htmlparser,抓紧并解析腾讯新闻,代码如下:
public class NetUtil { public static List<NewsBrief> DATALIST = new ArrayList<NewsBrief>(); public static String[][] CHANNEL_URL = new String[][] { new String[]{"http://news.qq.com/world_index.shtml","http://news.qq.com"}, new String[]{"http://news.qq.com/china_index.shtml","http://news.qq.com"}, new String[]{"http://news.qq.com/society_index.shtml","http://news.qq.com"}, new String[]{"http://news.qq.com/china_index.shtml","http://news.qq.com"}, new String[]{"http://news.qq.com/china_index.shtml","http://news.qq.com"}, new String[]{"http://news.qq.com/china_index.shtml","http://news.qq.com"}, new String[]{"http://news.qq.com/china_index.shtml","http://news.qq.com"}, new String[]{"http://news.qq.com/china_index.shtml","http://news.qq.com"}, new String[]{"http://news.qq.com/china_index.shtml","http://news.qq.com"}, new String[]{"http://news.qq.com/china_index.shtml","http://news.qq.com"}, new String[]{"http://news.qq.com/china_index.shtml","http://news.qq.com"}, }; public static int getTechNews(List<NewsBrief> techData, int cId) { int result = 0; try { NodeFilter filter = new AndFilter(new TagNameFilter("div"), new HasAttributeFilter("id", "listZone")); Parser parser = new Parser(); parser.setURL(CHANNEL_URL[cId][0]); parser.setEncoding(parser.getEncoding()); NodeList list = parser.extractAllNodesThatMatch(filter); for (int i = 0; i < list.size(); i++) { Tag node = (Tag) list.elementAt(i); for (int j = 0; j < node.getChildren().size(); j++) { try { String textstr = node.getChildren().elementAt(j).toHtml(); if (textstr.trim().length() > 0) { NodeFilter subFilter = new TagNameFilter("p"); Parser subParser = new Parser(); subParser.setResource(textstr); NodeList subList = subParser.extractAllNodesThatMatch(subFilter); NodeFilter titleStrFilter = new AndFilter(new TagNameFilter("a"), new HasAttributeFilter("class", "linkto")); Parser titleStrParser = new Parser(); titleStrParser.setResource(textstr); NodeList titleStrList = titleStrParser.extractAllNodesThatMatch(titleStrFilter); int linkstart = titleStrList.toHtml().indexOf("href=\""); int linkend = titleStrList.toHtml().indexOf("\">"); int titleend = titleStrList.toHtml().indexOf("</a>"); String link = CHANNEL_URL[cId][1]+titleStrList.toHtml().substring(linkstart+6, linkend); String title = titleStrList.toHtml().substring(linkend+2, titleend); NewsBrief newsBrief = new NewsBrief(); newsBrief.setTitle(title); newsBrief.setUrl(link); newsBrief.setSummary(subList.asString()); techData.add(newsBrief); } } catch (Exception e) { e.printStackTrace(); } } } } catch (Exception e) { result = 1; e.printStackTrace(); } return result; } public static int getTechNews2(List<NewsBrief> techData, int cId) { int result = 0; try { // 查询http://tech.qq.com/tech_yejie.htm 页面 滚动新闻的 标签 以及ID NodeFilter filter = new AndFilter(new TagNameFilter("div"), new HasAttributeFilter("id", "listZone")); Parser parser = new Parser(); parser.setURL(CHANNEL_URL[cId][0]); parser.setEncoding(parser.getEncoding()); // 获取匹配的fileter的节点 NodeList list = parser.extractAllNodesThatMatch(filter); StringBuilder NewsStr = new StringBuilder("<table>");// 新闻表格字符串 for (int i = 0; i < list.size(); i++) { Tag node = (Tag) list.elementAt(i); for (int j = 0; j < node.getChildren().size(); j++) { String textstr = node.getChildren().elementAt(j).toHtml() .trim(); if (textstr.length() > 0) { int linkbegin = 0, linkend = 0, titlebegin = 0, titleend = 0; while (true) { linkbegin = textstr.indexOf("href=", titleend);// 截取链接字符串起始位置 // 如果不存在 href了 也就结束了 if (linkbegin < 0) break; linkend = textstr.indexOf("\">", linkbegin);// 截取链接字符串结束位置 String sublink = textstr.substring(linkbegin + 6,linkend); String link = CHANNEL_URL[cId][1] + sublink; titlebegin = textstr.indexOf("\">", linkend); titleend = textstr.indexOf("</a>", titlebegin); String title = textstr.substring(titlebegin + 2,titleend); NewsStr.append("\r\n<tr>\r\n\t<td><a target=\"_blank\" href=\"" + link + "\">"); NewsStr.append(title); NewsStr.append("</a></td></tr>"); NewsBrief newsBrief = new NewsBrief(); newsBrief.setTitle(title); newsBrief.setUrl(link); techData.add(newsBrief); } } } } } catch (Exception e) { result = 1; e.printStackTrace(); } return result; } public static int parserURL(String url,NewsBrief newsBrief) { int result = 0; try { Parser parser = new Parser(url); NodeFilter contentFilter = new AndFilter( new TagNameFilter("div"), new HasAttributeFilter("id","Cnt-Main-Article-QQ")); NodeFilter newsdateFilter = new AndFilter( new TagNameFilter("span"), new HasAttributeFilter("class", "article-time")); NodeFilter newsauthorFilter = new AndFilter( new TagNameFilter("span"), new HasAttributeFilter("class", "color-a-1")); NodeFilter imgUrlFilter = new TagNameFilter("IMG"); newsBrief.setContent(parserContent(contentFilter,parser)); parser.reset(); // 记得每次用完parser后,要重置一次parser。要不然就得不到我们想要的内容了。 newsBrief.setPubDate(parserDate(newsdateFilter,parser)); parser.reset(); newsBrief.setSource(parserAuthor(newsauthorFilter, parser)); parser.reset(); newsBrief.setImgUrl(parserImgUrl(contentFilter,imgUrlFilter, parser)); } catch (Exception e) { result=1; e.printStackTrace(); } return result; } private static String parserContent(NodeFilter filter, Parser parser) { String reslut = ""; try { NodeList contentList = (NodeList) parser.parse(filter); // 将DIV中的标签都 去掉只留正文 reslut = contentList.asString(); } catch (Exception e) { e.printStackTrace(); } return reslut; } private static String parserDate(NodeFilter filter, Parser parser) { String reslut = ""; try { NodeList datetList = (NodeList) parser.parse(filter); // 将DIV中的标签都 去掉只留正文 reslut = datetList.asString(); } catch (Exception e) { e.printStackTrace(); } return reslut; } private static String parserAuthor(NodeFilter filter, Parser parser) { String reslut = ""; try { NodeList authorList = (NodeList) parser.parse(filter); // 将DIV中的标签都 去掉只留正文 reslut = authorList.asString(); } catch (Exception e) { e.printStackTrace(); } return reslut; } private static List<String> parserImgUrl(NodeFilter bodyfilter,NodeFilter filter, Parser parser) { List<String> reslut = new ArrayList<String>(); try { NodeList bodyList = (NodeList) parser.parse(bodyfilter); Parser imgParser = new Parser(); imgParser.setResource(bodyList.toHtml()); NodeList imgList = imgParser.extractAllNodesThatMatch(filter); String bodyString = imgList.toHtml(); //正文包含图片 if (bodyString.contains("<IMG") && bodyString.contains("src=")) { if(imgList.size()>0){ for(int i=0;i<imgList.size();i++){ String imgString = imgList.elementAt(i).toHtml(); int imglinkstart = imgString.indexOf("src=\""); int imglinkend = imgString.indexOf(">"); if(imgString.contains("\" alt=")){ imglinkend = imgString.indexOf("\" alt="); } if(imgString.contains("_fck")){ imglinkend = imgString.indexOf("_fck");// 截取链接字符串结束位置 } reslut.add(imgString.substring(imglinkstart + 5, imglinkend)); } } } } catch (Exception e) { e.printStackTrace(); } return reslut; } }
附件为用到的jar包;
关于新闻完整的新闻客户端,有需要的哥们可以留下邮箱,完整实现了新闻的抓取:
工程源码在:https://github.com/gqdy365/onlineNews
- jsoup-1.7.2.jar (286.8 KB)
- 下载次数: 62
- htmlparser.jar (281.4 KB)
- 下载次数: 97
评论
54 楼
shujen
2016-01-08
兄弟大神,求份代码学习。新手。麻烦1583196889@qq.com 敬候,谢谢
53 楼
小嘎轩遥
2016-01-04
兄弟大神,求份代码学习。新手。麻烦617000948@qq.com 敬候,谢谢
52 楼
dafengyang
2015-12-27
哥们,求版源码,邮箱249742073@qq.com
谢谢分享~~
谢谢分享~~
51 楼
dafengyang
2015-12-27
哥们,求版源码,邮箱yangxf868@163.com
谢谢分享~~
谢谢分享~~
50 楼
对号入座
2015-12-22
楼主,能不能发个简单点儿的,只需要能抓取新闻并查看新闻内容及图片就行了。不需要语音,谢谢。651175667@qq.com
49 楼
huanchu369
2015-12-04
583910894@qq.com 求源码,谢谢
48 楼
gqdy365
2015-05-20
u010860871 写道
博主,能加下你的q吗?我有问题想和你探讨
792108314
47 楼
u010860871
2015-05-13
博主,能加下你的q吗?我有问题想和你探讨
46 楼
gqdy365
2015-05-08
u010649761 写道
楼主发我一份完整代码吧,这几天一直在研究这块,快急死了.谢谢了.
工程源码在:https://github.com/gqdy365/onlineNews,如果如法下载,留下邮箱,我发给你;
45 楼
u010649761
2015-05-06
楼主发我一份完整代码吧,这几天一直在研究这块,快急死了.谢谢了.
44 楼
gqdy365
2015-04-10
hywgtg 写道
楼主求发一份源码学习下!429546038@qq.com
工程源码在:https://github.com/gqdy365/onlineNews
43 楼
gqdy365
2015-04-10
hywgtg 写道
楼主求发一份源码学习下!429546038@qq.com
工程源码在:https://github.com/gqdy365/onlineNews
42 楼
gqdy365
2015-04-10
hywgtg 写道
楼主求发一份源码学习下!429546038@qq.com
工程源码在:https://github.com/gqdy365/onlineNews
41 楼
hywgtg
2015-04-08
楼主求发一份源码学习下!429546038@qq.com
40 楼
jscxy0407
2015-03-18
博主好强大,源码可否发我一份,谢谢啊 1196380827@qq.com
39 楼
zzcaaa
2015-03-16
求一个完整客户端,急求啊 邮箱8wy3409664@163.com
38 楼
hao43284
2015-03-13
博主好强大,源码可否发我一份,谢谢啊 811706477@qq.com
37 楼
tianqin2011
2015-03-11
楼主 求源码啊 654534929@qq.com
有邮箱或者QQ的话 也想交流交流
有邮箱或者QQ的话 也想交流交流
36 楼
胡普行
2015-02-10
楼主,麻烦抽空给我发一份源码,本人最近项目需要这个功能。麻烦了!邮箱760692689@qq.com 麻烦了
35 楼
tianyaleixiaowu
2015-01-19
博主,在你万忙的时候,抽出一会时间,送我一份新闻app的源码好吗?我的邮箱:272551766@qq.com, 万分感谢
发表评论
-
Android中基于protobuf的socket通信的实例
2014-12-04 08:58 11225关于Protobuf的获取、用法见这篇文章:http://ww ... -
关于Android消息推送
2014-08-25 15:13 945最近项目中要用到一些关于服务器向客户端推送的功能,由于在11年 ... -
Android json通信(解析)方法
2014-07-30 14:17 1038下面是在做天气预报程序时用到的Json通信,解析方法,备份一下 ... -
Android中文按拼音排序
2014-01-10 19:03 11175需求:将一组数据按某一字段中文拼音排序 1、Test测试类: ... -
Android开发:组播(多播)与广播
2013-12-20 11:38 10440近期由于需要编写能够使同一局域网中的Android客户端与PC ... -
android hessian通信
2011-10-25 14:08 3043具体实现参考“农民伯伯”的两片文章, http://www.c ... -
下载应用到SD卡并安装
2011-07-07 10:26 2135更新软件时要用到将软件下载到SD卡并主动弹出安装界面,就想安卓 ...
相关推荐
使用http协议在安卓手机客户端引用网络资源,可以在手机上实现很多只有在网页上才能实现的功能
DayDayNews 仿网易新闻客户端,实现新闻浏览,视频播放,仿搜狐视频、百思不得姐等当前主流视频播放器,实现流媒体播放,自动监听屏幕转动,实现横屏播放 , 抓取百度图片,瀑布流显示,夜间模式,环信即时通讯
正方教务系统通用安卓客户端项目源码,本项目是某大学基于正方教务系统开发的安卓客户端项目,实现了课程表查询,个人成绩查询,个人信息查看等功能,国内的很多大学教务系统就是用的这套系统,因为客户端是基于正方...
本项目的新闻用的是Jsoup抓取自新浪RSS新闻源,天气信息用SAX解析器解析的一个网络XML天气源(2.3.3系统测试不可用,没有使用更高版本测试),新闻主页面可以实现类似于广告图片轮播的效果,新闻列表也可以上下滑动,...
这段时间做的一个新闻客户端,界面优美,数据都是从百度新闻那里直接抓取的,有json和html解析。上面的滑动Tab是通过自定义View自己画出来的,列表的图片都是通过异步软引用方式加载的,可以流畅的运行。另外新闻详情...
Android 仿CSDN资讯客户端通过jsoup抓取html资讯信息,使用谷歌官方SwipeRefreshLayout进行刷新展示,RecyclerView资讯新闻列表展示; 用数据库保存最后一次刷新的资讯信息并清空之前的信息,当网络断开或服务器错误...
正方教务系统数据抓取(含验证码识别),模拟登录,抓取课表,考试成绩,考试安排,个人信息。并且提供了Json Api接口可供客户端调用。这个是android端调用的
基于Android的新闻客户端,从网站上抓取信息,用手机显示,ListView和WebView显示
相信开发融云没有服务端很难下手,于是抓取到融云得到Token的地址并返回使得服务端代码不多而且简单,同时还有个人制作的聊天Demo开发聊天功能轻而易举。
该程序为仿新版的糗事百科客户端,数据是通过jsoup来抓取糗事百科网页版的,程序能正常运行,由于原客户端中有些功能模块的数据不能通过网页中抓取到,所有这类功能模块没有实现。程序sdk为android 4.0以上的版本,...
Android 仿36Kr 是一个仿照36Kr官方App,实时抓取36Kr官网数据的资讯类新闻客户端。 功能包括首页新闻,详情,发现,活动,侧滑效果,第三方登录以及分享,消息推送等。通过爬虫技术实时抓取36Kr数据 使用技术:Android5.0...
图文分享:使用的ShareSDK,实现了抓取新闻, 城市选择器修改了一下界面。 主界面:主要是分别类,数据库做了几张一对多的表,查询是写死的,但是因为没有数据,暂时只可以进来今日折扣和女装。 列表界面:列表界面...
Subsonic, DSub Android客户端 fork的主页 基本指令抓取依赖库git submodule initgit submodule update转到ServerProxy并生成项目文件android update project --path./
Android仿照36Kr官方新闻项目课程源码一个仿照36Kr官方,实时抓取36Kr官网数据的资讯类新闻客户端。包括首页新闻,详情,发现,活动,实时数据抓取,侧滑效果,第三方登录以及分享,消息推送等相关功能客户端。
ACAJ 使用 JSON 获取数据的 Android 客户端应用程序。 仅用于教育。 将项目导入 Eclipse。 构建级别 JDK 1.7+ Android 级别 API 19 您需要将 Web 应用程序设置为服务器端才能生成 json 字符串作为响应。
爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL...
这段时间做的一个新闻客户端,界面优美,数据都是从百度(百度新闻,百度知道,百度贴吧,百度图片)那里直接抓取的,有json和html解析。列表的图片都是通过异步软引用方式加载的,其中百度图片部分设计很多图片,...
爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL...
用于在android客户端上抓取数据包,对实时数据进行分析。