python爬蟲筆記03--jsonpath


一、json模塊

1、loads()方法,json字符串轉python對象。

list_json = '[1,2,3,4]'
dict_json = '{"key1":{"k1":"v1","k2":"v2"},"key2":{"k1":"v1","k2":"v2"}}'

list_ret = json.loads(list_json)
dict_ret = json.loads(dict_json)

會把true,false轉爲True,False,如果json字符串中的有True,False會報錯。

2、dumps()方法,python對象轉json字符串。

list_ = [1,2,3,4]
dict_ = {"key1":{"k1":"v1","k2":"v2"},"key2":{"k1":"v1","k2":"v2"}}

list_json = json.dumps(list_)
dict_json = json.dumps(dict_)

會把True,False轉爲true,false。

二、jsonpath語法與xpath的對比

描述 xpath jsonpath
根元素 / $
當前元素 . @
子元素 / .或者[]
父元素
不計位置 //
通配符,所有元素 * *
屬性 @
子元素操作符 [] []
| [XXX,XXX,XXX]
元素分割 [start:end]
過濾表達式 [] ?()
腳本表達式 ()
分組 ()

三、使用案例

{ "store": {
    "book": [
      { "category": "reference",
        "author": "小張",
        "title": "python從入門到精通",
        "price": 8.95
      },
      { "category": "fiction",
        "author": "小趙",
        "title": "python從入門到放棄",
        "price": 12.99
      },
      { "category": "fiction",
        "author": "小李",
        "title": "python從入門到脫髮",
        "isbn": "0-553-21311-3",
        "price": 8.99
      },
      { "category": "fiction",
        "author": "小明",
        "title": "python從入門到入土",
        "isbn": "0-395-19395-8",
        "price": 22.99
      }
    ],
    "bicycle": {
      "color": "red",
      "price": 19.95
    }
  }
}
表達式 結果
$.store.book[*].author 書店所有書的作者
$…author 所有的作者
$.store.* store的所有元素
$.store…price store裏面所有東西的price
$…book[(@.length-1)] 最後一本書
..book[0,1]..book[0,1] 、…book[0:2] 、$…book[:2] 前面的兩本書。
$…book[?(@.isbn)] 過濾出所有的包含isbn的書。
$…book[?(@.price<10)] 過濾出價格低於10的書。
$…* 所有元素

三、python中使用jsonpath、

import jsonpath
#匹配成功返回結果列表,未匹配成功返回False
ret = jsonpath.jsonpath(obj,'表達式')

obj必須爲python對象,如果是json字符串需要使用json.loads方法轉換成python對象。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章