JSON

给产品经理讲技术|一步一步写爬虫之JSON解析

字号+ 作者:H5之家 来源:H5之家 2016-08-12 17:04 我要评论( )

【文章摘要】了解了JSON的写法之后,再来看看JSON的解析。JSON如此流行,导致各种语言都有相应版本的JSON工具。【相关推荐】给产品经理讲技术|断点续传的奥义给

【文章摘要】了解了JSON的写法之后,再来看看JSON的解析。JSON如此流行,导致各种语言都有相应版本的JSON工具。

u=588304120,4207015084&fm=21&gp=0

【相关推荐】

给产品经理讲技术|断点续传的奥义

给产品经理讲技术 | 撩妹技术三部曲之”框架“

给产品经理讲技术丨没线,并不可怕?

给产品经理讲技术丨提需求的正确姿势是什么

给产品经理讲技术丨产品后悔药来了,讲讲热补丁技术

讲到,微信的「历史消息」页面只有在滑到最底部的时候,才会触发加载后面10篇文章。然后我们通过抓包,抓到了它请求后10篇文章数据的URL,以及服务器响应的数据。

640.webp (6)

这一坨数据虽然杂乱无章,但是仔细观察还是能看出一些端倪。比如里面有文章的标题、摘要以及作者信息,当然,也有我们最关心的文章的URL。有了URL我们就能下载到整篇文章,保存成PDF也就是水到渠成的事情了。

然而,摆在我们面前的一个问题是,如何让我们的爬虫从这些服务器吐回来的数据里,找到文章URL呢?电脑虽然速度快,但是需要人来告诉它怎么做,这就是所谓的「算法」。有几个办法。一个是我们一开始讲的正则表达式。正则表达式通过用一些预先定义好的规则,去一段文字里找能匹配这些规则的句子。我们这里要找URL,上网上一搜到处都是匹配URL的正则表达式。

正则表达式是一种思路,但是有个问题。当我们用正则表达式,千辛万苦找出所有URL之后,却发现丢掉了很多其他信息,比如URL属于哪篇文章,文章的发表时间熟悉如何,虽然这些信息后面不一定有用,但足以说明用正则表达式在这个场景里的局限性。

另一种方法,就是今天要讲的、费了老大功夫才引出来的「JSON」了。没错,服务器之所以用这样奇怪的格式、嵌套了这么多大括号来响应数据,不是为了为难隔壁的前端程序员,而是大家一开始就商量好了,你负责用JSON响应数据,我来负责来解析JSON把数据提取出来。

那么JSON到底是何方神圣呢?JSON全名JavaScript Object Notation,从JavaScript出道,最后遍布到整个代码界。它是一种轻量级的文本数据交换格式。举个例子,你要表达一则信息,比如本文的作者是果果,可以说作者=果果,也可以写成{“作者”:”果果”}这样的数据交换格式。写成什么样子无所谓,只要接收信息的人能听懂就行。JSON就是这个意思,它用{key:value}这样的格式表达信息,不仅轻量,而且容易解析。

key是这个JSON数据的名字,用一个字符串来表示。value是值,可以是一个字符串、一个数字、一堆数据(数组)、空值或者真假,甚至是另一个JSON数据。

字符串 {“name”:”guoguo”}。

数字 {“age”=18}。

真假 {“handsome”:true}。

另一个JSON数据 {“game”:{“name”:"Clash Royale”,“producer”:”supercell”},只需要在「值」的位置再填一个大括号描述的JSON数据就可以了。

一堆数据 {“articles”:[{“title”:"一步一步写爬虫之正则表达式”,”author":"果果”},{“title”:"一步一步写爬虫之抓包”,”author":"果果”}],用中括号把一个一个的value括起来,就成了一堆数据了。

了解了JSON的写法之后,再来看看JSON的解析。JSON如此流行,导致各种语言都有相应版本的JSON工具。比如Python自带的json模块,比如Java版本的Gson,来自Google。JSON工具一般有两个功能。

一是解析,输入一串JSON格式的字符串,key和value的集合,你可以根据key,很容易的找到value。比如我们爬虫里,解析这个JSON之后,只要知道key是”content_url”,就能立刻找到它对应的URL。二是编码。给你一串key和value的信息,能自动变成JSON标准的格式,一般服务器会用到。

JSON非常流行的另一个原因是它与JavaScript中「对象」的无缝配合。关于JavaScript对象的概念,我会在后面的「产品经理的JS课」系列文章中讲到,欢迎捧场。

欢迎添加微信公众号:给

产品经理

讲技术

本文由产品壹佰为你推荐并呈现

文章来源:公众号:给产品经理讲技术(ID:pm_teacher)

文章作者:果果

 

友情提示:

若出处标注错误,请联系QQ:2977686517及时更正,感谢理解和支持!

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 珙桐技术文档

    珙桐技术文档

    2016-07-15 15:01

  • 系统技术非业余研究

    系统技术非业余研究

    2016-07-15 14:00

  • Java的JSON转换类库GSON的基础使用教程

    Java的JSON转换类库GSON的基础使用教程

    2016-06-28 14:00

  • GSON实现Java对象的JSON序列化与反序列化的实例教程

    GSON实现Java对象的JSON序列化与反序列化的实例教程

    2016-06-28 13:00

网友点评
-