ajax返回的数据怎么显示出来_爬虫返回的Json数据怎么玩?一篇文章搞定!

d199de134393e6ebb193e2a980064006.png

1、Json是什么

JSON,全称为JavaScript Object Notation

JSON是轻量级的文本数据存储和交换格式,独立于语言。(JSON使用JavaScript语法来描述数据对象,但是JSON仍然独立于语言和平台,JSON解析器和JSON库支持许多不同的编程语言)

下面来看看Json数据到底长啥样?

2、Json长啥样

打开浏览器,输入如下网址:“https://www.douban.com/j/search_photo?q=宋智孝”

你要问为啥是“宋智孝”,那你自己猜吧。

我们可以看到很清爽的 JSON 格式对象(是不是很像Python中的“字典”)

展示的形式是这样的:

{
    "images": [
        {
            "src": "https://img1.doubanio.com/view/photo/photo/public/p2185662697.webp",
            "author": "蹦咕噜霸会念经",
            "url": "https://www.douban.com/link2/?url=http%3A%2F%2Fwww.douban.com%2Fphotos%2Fphoto%2F2185662697%2F&query=%E5%AE%8B%E6%99%BA%E5%AD%9D&cat_id=1025&type=search",
            "id": "2185662697",
            "title": "有一种美叫做宋智孝",
            "width": 381,
            "height": 500
        },
        {
            "src": "https://img1.doubanio.com/view/photo/photo/public/p2185662777.webp",
            "author": "蹦咕噜霸会念经",
            "url": "https://www.douban.com/link2/?url=http%3A%2F%2Fwww.douban.com%2Fphotos%2Fphoto%2F2185662777%2F&query=%E5%AE%8B%E6%99%BA%E5%AD%9D&cat_id=1025&type=search",
            "id": "2185662777",
            "title": "有一种美叫做宋智孝",
            "width": 452,
            "height": 600
        }
    ],
    "total": 2658,
    "limit": 20,
    "more": true
}

数据被放到了 images 对象里,它是个数组的结构,每个数组的元素是个字典的类型。

src、author、url、id、title、width 和height 这些字段代表的含义分别是原图片的地址、作者、发布地址、图片 ID、标题、图片宽度、图片高度等信息。

json的格式本来就很清爽了,那我要想更加“清爽”的查看数据之间的层级关系,该怎么办呢?

这时候就需要用到一个插(shen)件(qi)了。

JSON-handle(如图)

79ceaa2fcd38c6b4a0908fcb91453141.png

解析之后的数据长这样:

506938e9af6667ea650b954b46cd38f3.png

嗯,更清爽了!

3、在Python中玩转Json

在 Python 中有 JSON 库,可以让我们将 Python 对象和 JSON 对象进行转换,便于数据的解析。

在Json库里有两个方法:

json.dumps() 将Python对象(字符串)转换成为Json对象(字典)

json.loads() 将Json对象转换成为Python对象

下面这段代码中,通过loads()函数把data从“json string”转化为“dict”;又通过dumps()函数把data从“dict”转化为“json string”(折腾来、折腾去)

说白了就是一个“ 双引号”的问题,把双引号干掉,就是“dict”,放在python中就可以轻松的取到想要的节点数据。

d9a95b2fa9465d2c93d060bb1c2bc5c4.png

代码可通过网址查看:

https://tech.io/snippet/JqONpVh

4、实战演练

打开浏览器,输入如下网址:“https://www.douban.com/j/search_photo?q=宋智孝”,获得的src字段为图片的url地址。

506938e9af6667ea650b954b46cd38f3.png

我们要做的是把作者、原地址、标题保存为DataFrame,并存储为csv文件,然后根据图片的原地址把关于“宋智孝”的图片全部下载下来。

数据保存的代码:

利用request模块获取API的数据(记得加上headers,模拟浏览器的操作),然后把每一份数据存在“字典”里,再追加到“列表”中。

利用 pandas模块,把数据转为DataFrame,在保存为csv文件(注意中文乱码的问题)

import requests
import pandas as pd

query = '宋智孝'

headers = { "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                          "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36"}

url = 'https://www.douban.com/j/search_photo?q=' + query
response = requests.get(url, headers=headers).json() # 得到返回结果
# print(response)
result = []
for image in response['images']:    
    dict = {}
    dict["pic"] = image["src"]
    dict["author"] = image["author"]
    dict["title"] = image["title"]  
    result.append(dict)

    print(image['src'])  # 查看当前下载的图片网址
    download(image['src'], image['id'])  # 下载一张图片

result_pd = pd.DataFrame(result)
result_pd.to_csv("result_pd.csv",encoding='utf_8_sig')

下载图片的代码:

根据图片的URL地址,把图片下载到.py文件的同级目录,命名为“str(i).jpg”

def download(src, id):
    dir = './' + str(id) + '.jpg'
    try:
        pic = requests.get(src, headers=headers, timeout=10)
        # print(pic)
        with open(dir, "wb") as f:
            f.write(pic.content)

    except requests.exceptions.ConnectionError:
        print('图片无法下载')

运行结果:

9843ac82049e18cf27d2c2a094116187.png
5、我是小结

JSON是轻量级的文本数据存储和交换格式,独立于语言,可以使用Json Handle插件来“一目了然”地查看Json数据的层级关系。

利用Json扩展库,可以方便的把json数据转为python数据类型,通过一个批量下载图片的案例,介绍了Request库与json数据的访问。

希望这篇文章能帮助你在Python中更好地玩转Json数据。

如果觉得还不错,点点右下角的“在看”吧!

猜你喜欢
这个在线代码编辑器,可以分享给任何人这是一份详细的Jupyter入门使用指南用 Python 画一个捂脸表情

@天作之程

一个有料又有颜的编程技术号

182e9671e55b00f5408dc92e0d181cde.png

  在看”  我吗?

df15472320a7f946259005ef777fedb4.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值