基于爬虫的app快速开发与思考

基于爬虫的app快速开发与思考

2016-05-26

从“按空格”公众号 迁移至此

本文适用于有一定android开发经验的开发人员.

有幸跟大伙儿分享下本人基于爬虫技术开发app的前后经历。本文不会过多的讲解项目代码,重点是分享下本人使用jsoup达到的实际效果,做了哪些事情,衍生出了哪些问题及其解决办法,本文涉及到的所有代码和相关资源及使用说明均已传到github上面(具体链接地址在文章最下方),大家可以下载下来去看。

问题一:开发一款app内容从哪来

内容问题,首先想到的就是爬虫,因为爬取目标特别明确,所以无需采用爬虫框架,只需要简单的网页解析器即可,本人采用的是jsoup解析器,以悦读圈为例讲一下具体的使用

Jsoup解析器

jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。具体使用可以参考这个链接地址http://www.open-open.com/jsoup/

Jsoup使用案例----悦读圈(下载地址https://www.pgyer.com/enjoyread)

基于Jsoup开发了一款悦读圈app,内容来源于网站:特别关注-成熟人士的读者文摘(http://www.de99.cn/index.html)

原网站:


悦读圈App效果图:


用到的第三方资源

又拍云存储:内容分享时,修改过的html上传到又拍云存储上面,然后把这个链接地址分享到朋友圈或者其他地方就达到分享的目的了。

百度应用引擎:版本更新用,写了一个简单的HttpServlet返回版本更新数据接口,和一个APP上传页面,部署到百度应用引擎上

文章列表页解析


一般来讲文章列表包含的元素有:标题、一副图片、文章摘要、标签分类、发表时间、详情链接地址等,采用jsoup获取到该html并解析到你项目中的javabean对象,悦读圈解析时使用selector选择器较少,代码看上去不太整洁,也容易出错。建议各位开发的时候多用selector选择器。解析列表页时会获取到每篇文章的具体链接地址URL,以这个URL的MD5值作为文章的id使用,app中涉及到阅读历史、文章收藏,都可以通过该ID来唯一确定此文章。

内容详情页解析


内容详情页的解析大同小异,采用jsoup获得返回的html页面,然后去除html中无用的导航,侧边栏,广告等div元素,只保留内容核心区域的div,然后图片需要根据手机屏幕做处理,改写img标签元素,如果宽度大于手机屏幕则进行等比缩放,把改写后的html字符串用android的webview进行加载,效果就看上去很不错了如果是有多页的文章还需要处理是否有下一页的逻辑

图片的处理

图片的处理比较关键,一般遇到的问题有:

1、图片比较大,服务器流量hold不住;

2、图片比较小,手机端显示过于模糊,影响用户体验;

3 、手机端控件加载图片时需要预先知道图片分辨率。

有的网站图片比较大,用原网址或者直接存储到第三方,而且必要的时候链接地址还得改成绝对地址。对于图片较小的图片,可以找到对应资源的大图片,然后裁切后上传到第三方存储,并将其地址存储到后台服务器,分辨率处理也可以采用此方法。

问题二:如何才能进行快速开发

要想快速开发或者批量制作或者维护方便,必须进行标准化,万事皆是如此。

以爬虫抓取到的网页内容完全可以由自己进行二次整理,然后做成符合自己要求的app,我大致将内容归结为两种,一种是纯图片型的,一种是文章带图片型的,于是我的app核心模块也是这两种内容的处理。基于此需求,如何进行app的快速开发整体思路如下:

Android工程框架构建


具体到AS中的项目结构


这是三个项目:分别是格调女人、风度男人、美女套图,核心代码只需要维护FengDuLibs工程即可,切换项目是需要修改FengDuLibs的build.gradle依赖工程(对应app的资源工程),首页面风格(模块组合、侧滑菜单选项、tab切换等)在上层工程中修改即可,当然需要核心工程FengDuLibs支持,修改UI、缓存路径、请求接口、主题等只需要在相应的资源类工程中修改即可。

仍需改进的地方

1:资源抓取

问题:就是每解析一个网站或者一个新的模块,都需要增加一个类或者说具体的实现,去解析相应的网页。

解决办法:

1:采用解释器模式用自定义的解释器逻辑去解析。

2:类似于解释器模式,但相对简单,因为采用了selector选择器,所以语法规则可以搞的相对简单一些,避免自己写的解释器出现深层递归嵌套等现象,严重影响效率

2:mvp模式显然更适合这种项目分层

参考资源

MyCollector资源抓取工程:https://github.com/stdroom/MyCollector.git

Web后台工程: https://github.com/stdroom/FengduServer.git

Android工程: https://github.com/stdroom/FengDuAppFactory.git

悦读圈工程(后台、前端其它)https://github.com/stdroom/bae_web.git

后台学习资源(淘淘商城、新巴巴运动网 视频教程及源码):http://pan.baidu.com/s/1jH9p0Dg密码: 68sv

推荐一款Github插件:Octotree。用这个看github代码会方便一些

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容