ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:690.39KB ,
资源ID:1178436      下载积分:20 文钱
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,省得不是一点点
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.wenke99.com/d-1178436.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(安卓课程设计——新闻客户端(基于网页抓取).docx)为本站会员(龙***)主动上传,文客久久仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文客久久(发送邮件至hr@wenke99.com或直接QQ联系客服),我们立即给予删除!

安卓课程设计——新闻客户端(基于网页抓取).docx

1、题 目 android 课程设计新闻客户端 姓 名: 学 号: 专 业: 学 院: 指导教师: 二 零 一 八 年 十 一 月一、需求分析启动程序后可以进行新闻资讯的实时更新,可分不同的栏目让使用者了解任意感兴趣的资讯进行阅读,启动程序后可以进行新闻资讯的实时更新,可分不同的栏目让使用者了解任意感兴趣的资讯进行阅读。1)启动应用程序; 2)设置界面:采用多种布局嵌套,美化控件。 3)显示界面:模仿网易新闻客户端进行 UI 编写。 4)详细界面:分为头条、国内、国际、财经、科技、社会等板块从用户的角度出发,针对用户的需求,所涉及的程序响应速度快、信息处理速度快、安全性高是用户所需要的三大主要性能

2、,另外为了受众面更广,根据目前的 android 设备系统版本的分布情况,android2.3 以上的版本占到设备总量的 80%以上,所以做开发的时候选择的 android 系统最低版本也必须是android2.3 以上来保证用户量。二、概要设计(一)开发环境采用 windows+Eclipse+ADT 的环境进行开发,在 Android2.3 以上版本的系统中运行的。(二)系统流程软件分为了两大模块,分别是新闻客户端模块和服务器模块。a)客户端顾名思义就是前台框架设计,模仿了网易新闻的 app,界面设计参考的是github 网站的前辈;备注:打开后界面默认为“头条”界面b)服务器这里值得一提

3、的是做成了抓取各新闻网站,解析出新闻呈现给前台,用的是jsoup.jar 获取和 htmlparser.jar 解析,有点复杂了,但还好有使用方法,能直接拿过来用。1. jsoup.jar 获取(参考:http:/www.open- jar 包放到放到 Android 工程中 libs 目录下,加以编写即可:String html = “First parse“ + “Parsed HTML into a doc.“; Document doc = Jsoup.parse(html); 上面这个例子比较简单,直接就将 html 转换成 Document 实例了,之后再解析2. htmlpars

4、er.jar 解析(参考:http:/ url 队列中;2.解析网页内容,与主题进行相关度计算。具体步骤如下:a.读取 html 文件,获得页面编码,获得 String 格式的文件内容b.用页面编码实例化 html 文件的 Parserc.对需要提取的结点设置相应的 Filterd.根据给定的 Filter,用 Parser 解析 html 文件e.提取结点中的文本内容,进行处理三、设计与实现(一)布局设计主要设计了三个界面:全局界面、新闻列表显示界面、详细新闻界面a. 全局界面(main.xml)b. 新闻列表显示界面(list_item.xml)ListView 是 Android 系统自

5、带的控件之一,它的使用同样是十分广泛的,它通常用来加载一系列相同布局的列表。使用它同样需要一个 PagerAdapter 适配器来给它提供数据。从新闻列表的特征来看,显然是由一个 ListView 来实现的。但是为了在滑动 ListView 的时候,带动 ViewPager 一起滑动,则需要自定义一个控件,来讲广告轮播条的 ViewPager 和新闻列表的 ListView 关联起来。而大部分的新闻软件都有上拉刷新和下拉加载更多的功能,所以在此自定义控件中也应加上上拉刷新和下拉加载更多的功能。此自定义控件继承了 ListView类,实现了OnScrollListener,android.wid

6、get.AdapterView.OnItemClickListener 接口。c. 详细新闻界面(detail.xml)新闻详情页即是点击新闻进入后的页面,使用一个 ScrollView 来实现。在新闻详情页中,用户可以点击返回按钮返回到前一页面。(二)功能实现a. 主新闻页面的设计与实现定义出页面所需要用到的控件以及新闻栏目的适配器(如右图) ,然后初始化界面布局、标题等:protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);requestWindowFeature(Wind

7、ow.FEATURE_NO_TITLE);setContentView(R.layout.main);initLayout();initViewPage();initTitle();b. 新闻详细页面的设计与实现:c.数据接口:public class DataAdapter extends BaseAdapter Context mContext = null;LayoutInflater inflater;List newsData = new ArrayList();public DataAdapter(Context context, List nList) mContext = co

8、ntext;inflater = LayoutInflater.from(context);newsData = nList;Overridepublic int getCount() return newsData.size();Overridepublic Object getItem(int arg0) return null;Overridepublic long getItemId(int position) return 0;Overridepublic View getView(int position, View convertView, ViewGroup parent) H

9、olderView hView = null;if (null = convertView) hView = new HolderView();convertView = inflater.inflate(R.layout.list_item, null);hView.image = (ImageView)convertView.findViewById(R.id.news_image);hView.speak = (ImageView)convertView.findViewById(R.id.news_speak);hView.title = (TextView)convertView.f

10、indViewById(R.id.news_title);hView.brief = (TextView)convertView.findViewById(R.id.news_brief);hView.where = (TextView)convertView.findViewById(R.id.news_where);hView.date = (TextView)convertView.findViewById(R.id.news_time);convertView.setTag(hView); else hView = (HolderView) convertView.getTag();h

11、View.title.setText(newsData.get(position).getTitle();if(!“.equals(newsData.get(position).getContent() hView.brief.setText(NetUtil2.replaceBlank(str); else hView.brief.setText(“);if (NetUtil2.CURRENT_SPEAK.equals(newsData.get(position).getUrl() hView.speak.setVisibility(View.VISIBLE);hView.title.setT

12、extColor(Color.RED); else hView.speak.setVisibility(View.GONE);hView.title.setTextColor(Color.WHITE);hView.where.setText(newsData.get(position).getSource();hView.date.setText(newsData.get(position).getPubDate();if (null != newsData.get(position).getImgUrl()ImageLoader2.getInstance(mContext).loadImag

13、e(newsData.get(position).getImgUrl(), hView.image); else hView.image.setImageResource(R.drawable.icon_image_default);return convertView;public class HolderView private ImageView image = null;private ImageView speak = null;private TextView title = null;private TextView brief = null;private TextView w

14、here = null;private TextView date = null;d. 数据获取:利用 jsoup 和 htmlparser 抓紧并解析新闻,下面为解析腾讯新闻页面:public class NetUtil public static List DATALIST = new ArrayList(); public static String CHANNEL_URL = new String new String“http:/ new String“http:/ new String“http:/ new String“http:/ new String“http:/ new S

15、tring“http:/ new String“http:/ new String“http:/ new String“http:/ new String“http:/ new String“http:/ ; public static int getTechNews(List techData, int cId) int result = 0; try NodeFilter filter = new AndFilter(new TagNameFilter(“div“), new HasAttributeFilter(“id“, “listZone“); Parser parser = new

16、 Parser(); parser.setURL(CHANNEL_URLcId0); parser.setEncoding(parser.getEncoding(); NodeList list = parser.extractAllNodesThatMatch(filter); for (int i = 0; i 0) NodeFilter subFilter = new TagNameFilter(“p“); Parser subParser = new Parser(); subParser.setResource(textstr); NodeList subList = subPars

17、er.extractAllNodesThatMatch(subFilter); NodeFilter titleStrFilter = new AndFilter(new TagNameFilter(“a“), new HasAttributeFilter(“class“, “linkto“); Parser titleStrParser = new Parser(); titleStrParser.setResource(textstr); NodeList titleStrList = titleStrParser.extractAllNodesThatMatch(titleStrFilt

18、er); int linkstart = titleStrList.toHtml().indexOf(“href=“); int linkend = titleStrList.toHtml().indexOf(“); int titleend = titleStrList.toHtml().indexOf(“); String link = CHANNEL_URLcId1+titleStrList.toHtml().substring(linkstart+6, linkend); String title = titleStrList.toHtml().substring(linkend+2,

19、 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 getTe

20、chNews2(List techData, int cId) int result = 0; try / 查询http:/ 页面 滚动新闻的 标签 以及 ID NodeFilter filter = new AndFilter(new TagNameFilter(“div“), new HasAttributeFilter(“id“, “listZone“); Parser parser = new Parser(); parser.setURL(CHANNEL_URLcId0); parser.setEncoding(parser.getEncoding(); / 获取匹配的 filete

21、r的节点 NodeList list = parser.extractAllNodesThatMatch(filter); StringBuilder NewsStr = new StringBuilder(“);/ 新闻表格字符串 for (int i = 0; i 0) int linkbegin = 0, linkend = 0, titlebegin = 0, titleend = 0; while (true) linkbegin = textstr.indexOf(“href=“, titleend);/ 截取链接字符串起始位置 / 如果不存在 href了 也就结束了 if (li

22、nkbegin “, linkbegin);/ 截取链接字符串结束位置 String sublink = textstr.substring(linkbegin + 6,linkend); String link = CHANNEL_URLcId1 + sublink; titlebegin = textstr.indexOf(“, linkend); titleend = textstr.indexOf(“, titlebegin); String title = textstr.substring(titlebegin + 2,titleend); NewsStr.append(“rnrn

23、t“); NewsStr.append(title); NewsStr.append(“); 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

24、 = 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 newsaut

25、horFilter = 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(parserD

26、ate(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(NodeFilt

27、er 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 = “;

28、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();

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。