Android 模拟登录网页—脚本爬取数据

这篇主要来讲下近期做的一个项目-客户端爬取网页数据,用以向客户个性化推荐产品。那么怎么在Android客户端上将浏览的网页爬取,提取有价值的数据呢?请耐心看下去.

一.爬取介绍

首先让我们来了解下爬取这个东西。 一般来讲对我们而言,需要抓取的是某个网站或者某个应用的内容,提取有用的价值,内容一般分为两部分,非结构化的文本(e.g. HTML网页),或结构化的文本(e.g. JSON数据)。
这边要特殊介绍下HTML网页。HTML基本上是传统爬虫过程中最常见的,也就是大多数时候会遇到的情况,例如抓取一个网页,得到的是HTML,然后需要解析一些常见的元素,提取一些关键的信息。HTML其实理应属于结构化的文本组织,但是又因为一般我们需要的关键信息并非直接可以得到,需要进行对HTML的解析查找,甚至一些字符串操作才能得到,所以还是归类于非结构化的数据处理中。

因为我这期项目做的就是跟HTML网页相关,所以我很关心网页内容的来源,以及对应的解析爬取方式。
来源:

  1. 网页包含内容。一般来讲基本上是静态网页已经写死的内容,或者动态网页,采用模板渲染,浏览器获取到HTML的时候已经是包含所有的关键信息,所以直接在网页上看到的内容都可以通过特定的HTML标签得到
  2. JavaScript代码加载内容。这种情况是由于虽然网页显示时,内容在HTML标签里面,但是其实是由于执行js代码加到标签里面的,所以这个时候内容在js代码里面的,而js的执行是在浏览器端的操作,所以用程序去请求网页地址的时候,得到的response是网页代码和js的代码,所以自己在浏览器端能看到内容。
  3. Ajax异步请求。这种情况是现在很常见的,尤其是在内容以分页形式显示在网页上,并且页面无刷新,或者是对网页进行某个交互操作后,得到内容。

=========================
解析方式:

  1. CSS选择器。现在的网页样式比较多,所以一般的网页都会有一些CSS的定位,例如class,id等,或者我们根据常见的节点路径进行定位。e.g. #id .class
  2. XPATH。XPATH是一种页面元素的路径选择方法,可以通过路径表达式对XML文档的节点进行定位。 比如—//*[@id=”finance”],意思是找寻所有节点符合id为finance的节点。
  3. 正则表达式。 用标准正则解析,一般会把HTML当做普通文本,用指定格式匹配当相关文本,适合小片段文本,或者某一串字符,或者HTML包含javascript的代码,无法用CSS选择器或者XPATH。

介绍完这些,看官们如果还有些疑问,可以去网上去丰富一下以上提的点,接下来,看Android客户端对爬取的实现

二.客户端实现爬取

实现原理:在Android界面上,开启一个webview,加载比如某邮箱或者某登录网站的h5页面,同时在 h5页面加载完成后注入需要的脚本(可能多个,可依情况拼接注入),脚本会去监听用户的登录动作,从而拿到用户session,去爬取用户需要的数据,再通过js调native函数,展示给用户!
这边注入又分两种方式:静态与动态

  1. 静态:在onPageFinished()方法中,读取需要注入脚本文件,字符串拼接后,使用webview.callJavascript(“javascript:”+jsStr,new ValueCallback())注入 **
  2. 动态:在onPageFinished()中,使用webview.loadUrl(“javascript:”+jsUrl);该方式可能会导致三星,魅族手机 libc奔溃,我偶尔会遇到!

由于脚本内容涉及公司开发机密,目前不公开,大概实现思想:就是根据你所爬取的网页,根据其特性,再符合你的需求,通过CSS选择器,以及Ajax请求,去模拟操作,得到数据并提取。因为我脚本是通过javascript写的,通过jquery库去模拟URL请求,得到data, 这时候的data就是平时看到网页内容的源代码,依据上面提到的三种解析方式,基本都可以实现。

三.脚本更新

因为HTML网页是来自各个公司,不受自己控制,如果其版本改动,我们所写的脚本不符合改动后的网页爬取,这时候怎么办呢?没关系,我们在客户端注入脚本时,对我们的脚本做线上版本的更新,保证脚本在后续操作上的可行性!下面是脚本的安装与热更新流程图,这边就不多说了!
安装脚本

安装脚本

更新脚本

更新脚本

脚本爬取的介绍到这里就告一段落了,后续会继续优化流程,优化爬取策略,有兴趣的朋友可以找我讨论下,谢谢!

如果觉得此文不错,麻烦帮我点下“喜欢”。么么哒!

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

推荐阅读更多精彩内容

  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,157评论 0 3
  • HTTP基本原理 URI、URL、URN(Uninform Resource) URI(Identifier):统...
    GHope阅读 2,073评论 2 26
  • 没有被正确同步的含义是什么 没有正确同步的代码对于不同的人来说可能会有不同的理解。在Java内存模型这个语义环境下...
    竹天亮阅读 463评论 0 0
  • 遇见最美好的回忆~ 七年时间弹指一挥间,改变了容颜,不变我们的内心,不管未来如何,你们永远在我心中~给我温暖和感动...
    讷言自律阅读 180评论 0 2