json是一种轻量级的数据交换格式,由于一些优秀的特性比如比 XML 更小、更快,更易解析和阅读,并有效地提升网络传输效率,而得到广泛使用。
Json采集的优点:
1、无需加载图片视频等信息,采集速度更快
2、部分网站防采集限制减少,采集更加顺畅
如何采集json数据,请看json教程:
使用JsonPath表达式从Json字符串中提取数据,JsonPath和XPath有点相似,但写法却是不一样的,这里我们对比一下XPath来学习JsonPath的用法。 先上一段Json字符:
{ "store": { "book": { "category": "reference", "author": "Nigel Rees", "title": "Sayings of the Century", "price": 8.95 }, { "category": "fiction", "author": "Evelyn Waugh", "title": "Sword of Honour", "price": 12.99 }, { "category": "fiction", "author": "Herman Melville", "title": "Moby Dick", "isbn": "0-553-21311-3", "price": 8.99 }, { "category": "fiction", "author": "J. R. R. Tolkien", "title": "The Lord of the Rings", "isbn": "0-395-19395-8", "price": 22.99 } , "bicycle": { "color": "red", "price": 19.95 } } }
比如我们要提取第一本书(book)的标题(title),如果我们把它当做是Xml的话,可以这样写
XPath:/store/book1/title
而使用JsonPath则是这样写
JsonPath:$.store.book0.title
或者也可以这样写 $'store''book'0'title'
JsonPath中的$相当于Xpath中的首字符"/",代表“根成员对象”,因为JSON结构通常是匿名的,不一定有一个“根成员对象”,所以这个$实际上是虚拟出来的,这里我们不用管它,知道他代表根对象就行了。而XPath中间部分的子操作符“/“,在JsonPath中则是用"."来表示,或者用第二种写法,用中括号""来括住节点名称(节点名称要加上单引号)。
下面列个表格对比一下
XPath | JsonPath | 说明 |
/ | $ | 根对象/元素 |
. | @ | 当前对象/元素 |
/ | . or | 子操作符 |
.. | n/a | 父操作符 |
// | .. | 递归查找所有级别的子级元素 |
* | * | 通配符 |
@ | 无 | 查找指定属性,json中无属性的定义 |
subscript operator. XPath uses it to iterate over element collections and for predicates. In Javascript and JSON it is the native array operator. | ||
| | , | Union operator in XPath results in a combination of node sets. JSONPath allows alternate names or array indices as a set. |
无 | start:end:step | array slice operator borrowed from ES4. |
?() | 用于过滤 | |
无 | () | 脚本表达式,使用底层的脚本引擎。 |
() | 无 | Xpath中的分组 |