飞道的博客

python的requests爬取Json数据,从Json数据中提取标题和图片(腾讯视频的某综艺节目)

503人阅读  评论(0)

今天,有粉丝想要了解更多爬取Json数据,存储Json数据,提取Json数据中信息的内容。因此,我接着发文给大家分享一波。

我今天随便找了一个腾讯视频的综艺节目作为例子来分享Json数据的爬取,存储,提取,还是一样采用Fiddler抓包,抓到Json数据。关于Fiddler的安装,详情见:Fiddler安装

抓到的Json包,如下图:


代码如下图:

import json
import requests
import os
import re
import time
import random

'''
#encoding='utf-8'
Author:Mr.Pan_学狂
start_time:2021/4/23/18:30
finish_time:2021/4/23/21:50
用requests库
实现json数据的爬取,存储json数据,
读取json数据,提取标题和图片
'''

class Json_Process:
    def __init__(self):
        self.Json_data = ''#设置一个空字符串
        self.headers = {
   
            'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE'
        }

    def spyder(self):#定义一个爬虫函数
        url = 'https://node.video.qq.com/x/api/wuji_cache/object?appid=detail_page_conf&schemaid=t_detail_vid_next&schemakey=e4755c269167488797f1acbef5c6b053&size=total&filter=c_is_valid%3Dtrue'
        response = requests.get(url,headers=self.headers,verify=False)#传入参数url地址,请求头headers,证书为False
        response.encoding='utf-8'#以utf-8的方式编码
        self.Json_data = response.json()#以字典格式返回
        # print(self.Json_data)#打印数据
        # print(type(self.Json_data))#查看数据类型
        #print(self.Json_data['data'])

    def Json_storage(self):
        if os.path.exists('G:/Json'):#若路径存在执行追加写
            with open('G:/Json/综艺节目.json','a+',encoding='utf-8') as f:
                json.dump(self.Json_data,f,indent=0)
        else:#否则
            os.mkdir('G:/Json')#创建Json文件夹
            with open('G:/Json/综艺节目.json','a+',encoding='utf-8') as f:
                json.dump(self.Json_data,f,indent=0)

    def read_file(self):#定义一个读取文件的函数
        with open('G:/Json/综艺节目.json','r+',encoding='utf-8') as f:
            file = f.read()#读取全部内容
        json_data = json.loads(file)#加载内容
        #print(json_data)
        Data_ls = json_data['data']#取出data对应的值,是list列表类型
        title_dt = {
   }#定义一个空字典,用于存储标题和对应的图片链接
        for D in Data_ls:
            try:#加入异常处理机制,使不满足条件的时候跳过,而不报错。
                if type(D) is dict:
                    title_dt[D['c_next_title']] = D['c_next_imgurl']
                    '''
                    将字典的c_next_title值设置为空字典title_dt的键,
                    字典的c_next_imgurl对应空字典title_dt的值。
                    相当于是标题对应图片链接。
                    '''
            except Exception:#出现异常的时候,跳过
                continue
        #print(title_dt)#打印字典
        return title_dt
        # print(type(json_data))

    def get_img_and_save_file(self):
        img_dt = Json_Process.read_file(self)#调用函数,接收返回值
        # print(img_dt)

        if os.path.exists('G:/images'):#如果存在存在这个路径,则执行执行追加写入
            for img_name in img_dt:
                img_url = img_dt[img_name]#从字典中获取图片的地址
                img = requests.get(img_url,headers=self.headers,verify=False)
                with open('G:/images/{}.jpg'.format(img_name),'wb+') as f:
                    f.write(img.content)

        else:#否则,执行创建文件夹,并追加写入
            os.mkdir('G:/images')#创建一个文件夹,用于存储image图片
            for img_name in img_dt:
                img_url = img_dt[img_name]#从字典中获取图片的地址
                img = requests.get(img_url,headers=self.headers,verify=False)
                with open('G:/images/{}.jpg'.format(img_name),'wb+') as f:#图片是以二进制的形式写入
                    f.write(img.content)#获取图片内容

if __name__ == '__main__':
    JP = Json_Process()#实例化对象
    JP.spyder()#调用函数
    JP.Json_storage()#存储json数据
    JP.read_file()#读取json文件,提取图片
    JP.get_img_and_save_file()#获取图片以及保存图片

运行结果,如下图:






大家可以看见,我的G盘现在是没有images文件夹的:

运行之后,结果如下图:



进入images文件夹,下面有全部图片:

关于本文的一个小问题,json格式的爬取,感谢两位大佬:joker_hai的文章,Helele_Blog的评论回复。
最后,感谢大家前来观看鄙人的文章,文中或有诸多不妥之处,还望指出和海涵。


转载:https://blog.csdn.net/weixin_43408020/article/details/116064101
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场