• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

数据——Jsonpath

武飞扬头像
我的眼里只有学习
帮助1

目录

一、JsonPath安装

二、JsonPath使用

2.1、JsonPath和xpath语法对比

2.2、jsonpath具体使用方法

2.2.1、jsonpath 获取参数

2.2.2、对应的 json 字符串:

2.2.3、对应的python代码

三、Jsonpath解析淘票票

3.1、python代码

3.1.1、获取 json 数据并保存至本地

3.1.2、根据本地 json 文件获取相应信息

3.2、结果


一、JsonPath安装

学新通

二、JsonPath使用

注意:JsonPath只能解析本地文件,不能解析服务器响应的文件

2.1、JsonPath和xpath语法对比

学新通

2.2、jsonpath具体使用方法

2.2.1、jsonpath 获取参数

学新通

2.2.2、对应的 json 字符串:

  1.  
    {
  2.  
    "store": {
  3.  
    "book":[
  4.  
    {
  5.  
    "category": "修真",
  6.  
    "author": "六道",
  7.  
    "title": "坏蛋是怎样炼成的",
  8.  
    "price": 8.95
  9.  
    },
  10.  
    {
  11.  
    "category": "修真",
  12.  
    "author": "天蚕土豆",
  13.  
    "title": "斗破苍穹",
  14.  
    "price": 12.99
  15.  
    },
  16.  
    {
  17.  
    "category": "修真",
  18.  
    "author": "唐家三少",
  19.  
    "title": "斗罗大陆",
  20.  
    "isbn": "0-553-21311-3",
  21.  
    "price": 8.99
  22.  
    },
  23.  
    {
  24.  
    "category": "修真",
  25.  
    "author": "南派三叔",
  26.  
    "title": "皇辰变",
  27.  
    "isbn": "0-395-19395-8",
  28.  
    "price": 22.99
  29.  
    }
  30.  
    ],
  31.  
    "bicycle": {
  32.  
    "color": "黑色",
  33.  
    "price": 19.95
  34.  
    }
  35.  
    }
  36.  
    }
学新通

2.2.3、对应的python代码

  1.  
    import jsonpath
  2.  
    import json
  3.  
     
  4.  
    obj = json.load(open('20_爬虫_解析_jsonpath.json', 'r', encoding='utf8'))
  5.  
     
  6.  
    # 书店所有书的作者(xpath:/store/book/author)
  7.  
    author_list = jsonpath.jsonpath(obj, '$.store.book[*].author')
  8.  
     
  9.  
    # 书店第一本书
  10.  
    book_first = jsonpath.jsonpath(obj, '$..book[0]')
  11.  
     
  12.  
    # 书店最后一本书
  13.  
    book_last = jsonpath.jsonpath(obj, '$..book[(@.length-1)]')
  14.  
     
  15.  
    # 书店前两本书
  16.  
    book_list_second1 = jsonpath.jsonpath(obj, '$..book[0,1]')
  17.  
    book_list_second2 = jsonpath.jsonpath(obj, '$..book[:2]')
  18.  
     
  19.  
    # 所有的作者(xpath://author)
  20.  
    author_allList = jsonpath.jsonpath(obj, '$..author')
  21.  
     
  22.  
    # store下面的所有元素
  23.  
    tag_list = jsonpath.jsonpath(obj, '$.store.*')
  24.  
     
  25.  
    # store里面的所有钱
  26.  
    price_list = jsonpath.jsonpath(obj, '$.store..price')
  27.  
     
  28.  
    # 条件过滤,需要在()前加"?"
  29.  
    # 过滤出所有包含isbn的书
  30.  
    book_list_isbn = jsonpath.jsonpath(obj, '$..book[?(@.isbn)]')
  31.  
     
  32.  
    # 条件过滤,需要在()前加"?"
  33.  
    # 哪本书超过10块钱
  34.  
    book_list_overTen = jsonpath.jsonpath(obj, '$..book[?(@.price>10)]')
  35.  
     
  36.  
    print(book_list_overTen)
学新通

三、Jsonpath解析淘票票

3.1、python代码

3.1.1、获取 json 数据并保存至本地

  1.  
    import urllib.request
  2.  
    import json
  3.  
    import jsonpath
  4.  
     
  5.  
    url = 'https://dianying.taobao.com/cityAction.json?activityId&_ksTS=1662563919541_108&jsoncallback=jsonp109&action=cityAction&n_s=new&event_submit_doGetAllRegion=true'
  6.  
     
  7.  
    headers = {
  8.  
    # 带:的属性会报错,不能使用
  9.  
    # ':authority': 'dianying.taobao.com',
  10.  
    # ':method': 'GET',
  11.  
    # ':path': '/cityAction.json?city=110100&_ksTS=1662562312158_19&jsoncallback=jsonp20&action=cityAction&n_s=new&event_submit_doLocate=true',
  12.  
    # ':scheme': 'https',
  13.  
    # 编码格式与爬虫不符
  14.  
    # 'accept-encoding': 'gzip, deflate, br',
  15.  
    }
  16.  
     
  17.  
    request = urllib.request.Request(url=url, headers=headers)
  18.  
     
  19.  
    response = urllib.request.urlopen(request)
  20.  
     
  21.  
    content = response.read().decode('utf8')
  22.  
     
  23.  
    # 结果:jsonp20({"returnCode":"0","returnValue":{"city":110100,"name":"北京"}}); 需要去掉”jsonp20();“
  24.  
    # 切割,获取json字符串
  25.  
    content = content.split('(')[1].split(')')[0]
  26.  
     
  27.  
    with open('21_爬虫_解析_jsonpath淘票票.json', 'w', encoding='utf8') as fp:
  28.  
    fp.write(content)
学新通

3.1.2、根据本地 json 文件获取相应信息

  1.  
    import json
  2.  
    import jsonpath
  3.  
     
  4.  
    obj = json.load(open('21_爬虫_解析_jsonpath淘票票.json', 'r', encoding='utf8'))
  5.  
     
  6.  
    city_list = jsonpath.jsonpath(obj, '$..regionName')
  7.  
     
  8.  
    print(city_list)

3.2、结果

学新通

注意:红框内为有效json,其他字符串为非json字符串,在进行json识别时,需要去掉。

学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgibaee
系列文章
更多 icon
同类精品
更多 icon
继续加载