前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python pprint | 超级好用的Python库,漂亮的打印,让json数据提取体验更好

Python pprint | 超级好用的Python库,漂亮的打印,让json数据提取体验更好

作者头像
叶庭云
发布2022-05-09 09:08:12
2.8K0
发布2022-05-09 09:08:12
举报
文章被收录于专栏:Python进阶之路Python进阶之路

文章目录

  • 一、简介
  • 二、实践案例
  • 三、总结

一、简介

在实践

Python

爬虫的时候,大家肯定碰到过返回的结果是json字符串格式的数据。

关于 json 数据的详解可以学习如下文章:

对于这种数据可以利用 json 模块将 json 字符串直接转化为字典格式的数据,字典为 {key:value} 型,之后再对应提取我们想要的字段。

但是存在一个问题:

往往网页获取到的 json 数据转化为字典后,嵌套太多,看起来一团糟的感觉,很难一下观察到哪个 key 对应那个value。

本文主要介绍一个超级好用的 Python 库:

pprint

,它可以格式化打印字典数据,让对应关系更加清晰直观,算是一个实用的爬虫技巧。快学起来!


二、实践案例

下面我们以根据地理名称爬取高德地图地理位置信息为例,展现

pprint

的妙用:

我们利用 json.loads(data.text) 方法,直接将 json 字符串,转换为了字典格式的数据。一看数据,一大堆东西,我们该怎么解析想要的字段?

pprint模块的妙用:我们期望有一种方法能够快速帮助我们理清字典嵌套key:value对应的关系。

pprint是 Python 第三方库,在使用之前,需要先 pip 安装上。

代码语言:javascript
复制
pip install pprint -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

安装后,可以直接导入使用。

代码语言:javascript
复制
from pprint import pprint 

接着,对于上述案例,现在我们使用 pprint() 函数,打印一下,看看会有什么好的效果呢?如下所示:

从图中可以看到,这个字典嵌套key:value 对应关系,一目了然,清晰美观,这样之后的解析提取数据就很容易了!源码如下:

代码语言:javascript
复制
import requests
import json
from pprint import pprint

def coords(city):
    url = 'https://restapi.amap.com/v3/geocode/geo'   # 输入API问号前固定不变的部分
    params = {'key': '注意:换成你的高德地图的API应用的key',                 
              'address': city}                   # 将两个参数放入字典
    res = requests.get(url, params)
    jd =  json.loads(res.text)
    return jd['geocodes'][0]['location']


def get_location(keyword, city):
    # 获得经纬度
    keynum = "注意:换成你的高德地图的API应用的key"
    user_agent = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50'
    headers = {'User-Agent': user_agent}
    url = 'http://restapi.amap.com/v3/place/text?key=' + keynum + '&keywords=' + keyword + '&types=&city=' + city + '&children=1&offset=1&page=1&extensions=all'
    data = requests.get(url, headers=headers)
    data.encoding = 'utf-8'
    data = json.loads(data.text)
    pprint(data)
    result = data['pois'][0]['location'].split(',')
    return result[0], result[1]

print(":".join(["CSDN叶庭云", "https://yetingyun.blog.csdn.net/"]))
get_location("四川省", "成都市")

下面再用一个简单的案例,带大家感受一下。

代码语言:javascript
复制
dic = {"status":"1","info":"OK","infocode":"10000",
       "count":"1",
       "geocodes":[{"formatted_address":"上海市","country":"中国","province":"上海市","citycode":"021","city":"上海市","district":[],"township":[],"neighborhood":{"name":[],"type":[]},"building":{"name":[],"type":[]},"adcode":"310000","street":[],"number":[],"location":"121.473701,31.230416","level":"省"}]}

有这样一个嵌套字典,是关于上海市的地理位置信息的,如果想要获标签 location 对应的经纬度数据,我们应该这样做:

代码语言:javascript
复制
pprint(dic) 

结果如下:

对于上面这个数据,大家应该看一眼就知道怎么提取经纬度数据,代码如下所示:

代码语言:javascript
复制
data = dic["geocodes"][0]["location"]
longitude, latitude = data.split(",")
print(data)
print("经度:", longitude)
print("纬度:", latitude)

结果如下:

网页源代码返回的 json 数据,基本都是类似的,只要你搞清楚了它的结构关系,后面 for 循环遍历提取对应的数据就好。

也有大佬做了 JSON 数据在线解析和格式化、以及转 XML 的在线网页,如下所示:


三、总结


本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-02-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、简介
  • 二、实践案例
  • 三、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档