08-爬虫数据存储json与CSV

第8讲

整体课程知识点查看 :https://blog.csdn.net/j1451284189/article/details/128713764

本讲总结

数据存储简介

json模块使用

CSV 模块使用

爬虫案例-爬取游戏详情(未完成)

一、数据存储简介

json  轻量级数据交互格式  有且仅有一个[]或{} 不能注释 {'':'','':''}[{}]
	
csv 逗号分割值的文件格式

MongoDB  

Redis

MySQL

二、json

轻量级数据交互格式  
有且仅有一个[]{},不能注释,最后一个数据不带','
(xml 重量级)  

模块操作   

#总结
list_data = json.loads(data) # 字符串 --》dict list
data = json.dumps(list_data) #  dict list --》 字符串
json.dump(data, open('baidu.json', 'w')) # 字典/列表写入文件
json.load(open('detail.json','r')) # 读取文件 转为字典/列表




import json

# 1、字符串和dict  list 转换
# 字符串 --》dict list
data = '[{"name":"linda", "age": 18}, {"name":"lily", "age": 20}]' #单括号在外,否则结果不对
list_data = json.loads(data)
print(data,type(data))
print(list_data,type(list_data))
#  dict list --》 字符串
data = [{"name":"linda", "age": 18}, {"name":"lily", "age": 20}]  #单括号在外,否则结果不对
list_data = json.dumps(data)
print(data,type(data))
print(list_data,type(list_data))
# 2、文件对象 和 dict  list 转换
# 字典/列表写入文件
data = [{"name": "linda", "age": 18}, {"name":"lily", "age": 20}]
json.dump(data, open('baidu.json', 'w'))

# 读取文件 转为字典/列表
fp = open('detail.json','r')
result = json.load(fp)
print(result)

三、CSV

def day8_csv_show():
    # 将json 中数据  转换成  csv文件
    json_fp = open('detail.json','r',encoding='utf-8')
    # 写入报错   UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position 243: illegal multibyte sequence
    # csv_fp = open('baidu.csv','w')
    # 修改为 不报错,成功写入
    csv_fp = open('baidu.csv', 'w', encoding='utf-8')
    data_list = json.load(json_fp)
    # 取出表头
    sheet_title = data_list[0].keys()
    # 取出内容
    sheet_data = []
    for data in data_list:
        sheet_data.append(data.values())
    print(sheet_title)
    print(sheet_data)
    # CSV写入器
    writer = csv.writer(csv_fp)
    # 写入表头
    writer.writerow(sheet_title)
    # 写入内容
    writer.writerows(sheet_data)
    # 保存并关闭文件
    json_fp.close()
    csv_fp.close()

四、案例爬取不思议迷宫冈布奥(待优化)

class Mystery_dungeon(object):
    def __init__(self):
        self.header = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0',
        }
        self.base_url = 'https://news.4399.com/slmbsymg/shilaimu/'

    def get_response(self,url):
        data = requests.get(url,headers=self.header).content.decode('gbk')
        return data


    def parse_gamboo_list(self, data):
        soup = BeautifulSoup(data,'lxml')
        gamboo_select = soup.select('.clist')[0].select('a')
        gamboo_list = []
        for gamboo in gamboo_select:
            name = gamboo.get_text()
            url = 'http:' + gamboo.get('href')
            pic_src = gamboo.select('img')[0].get('src')
            if pic_src == None:
                pic_src = gamboo.select('img')[0].get('lz_src')
            pic_src = 'http:' + pic_src
            gamboo_list.append({'name':name, 'url':url, 'pic_src':pic_src})
            print(name, url, pic_src)
        return gamboo_list


    def parse_gamboo_detail(self, data):
        """数据格式不好爬虫"""
        soup = BeautifulSoup(data, 'lxml')
        series = '' # 系列
        camp = '' #阵营
        get_method = '' #获取方法
        talent = '' #天赋
        skill = '' #技能
        return

    def save_data(self,data,file_path):
        with open(file_path, 'w', encoding='utf-8') as f:
            f.write(data)

    def run(self):
        # 获取冈布奥的响应
        data = self.get_response(self.base_url)
        gamboo_list = self.parse_gamboo_list(data)
        for gamboo in gamboo_list:
            gamboo_url = gamboo['url']
            gamboo_data = self.get_response(gamboo_url)
            gamboo_detail = self.parse_gamboo_detail(gamboo_data)


        # self.save_data(data, 'baidu.html')
        pass

Mystery_dungeon().run()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值