一、实验概述:
【实验目的】

  1. 初步掌握数据采集的方法;
  2. 初步掌握利用爬虫爬取网络数据的方法
  3. 掌握不同数据格式之间的转换方法;

【实施环境】(使用的材料、设备、软件) Linux或Windows操作系统环境,MySql数据库,Python或其他高级语言

二、实验内容
第1题 爬取网络数据
【实验要求】

  1. 爬取酷狗音乐网站(https://www.kugou.com/)上榜单前500名的歌曲名称,演唱者,歌名和歌曲时长
  2. 将爬取的数据以JSon格式文件保存。
  3. 读取JSON格式任意数据,检验文件格式是否正确。

【实验过程】(步骤、记录、数据、程序等)
请提供操作步骤及界面截图证明。

from bs4 import BeautifulSoup
import requests
import time
import re
import json
import demjson
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'
}nameList = []
singerList = []
timeList = []
song = []
total = []
keys = ['songName','singer','time']def get_info(url, file):res = requests.get(url, headers=headers)res.encoding = file.encoding  # 同样读取和写入的编码格式soup = BeautifulSoup(res.text, 'lxml')ranks = soup.select('span.pc_temp_num')titles = soup.select('a.pc_temp_songname')times = soup.select('span.pc_temp_time')#jsonData = []for rank, title, time in zip(ranks, titles, times):data = {#'rank': rank.get_text().strip(),'title': title.get_text().strip(),'time': time.get_text().strip()}#print(data)singer, songName = data['title'].split(' - ')nameList.append(songName)singerList.append(singer)timeList.append(data['time'])#print(nameList)#print(singerList)#print(data['time'])#print(timeList)#print(singer, songName)#print(jsonData)def output(url, file):songInfo = []for i in range(0,len(nameList)):#print(nameList[i])#print(singerList[i])#print(timeList[i])songInfo.append(nameList[i])songInfo.append(singerList[i])songInfo.append(timeList[i])#print(songInfo)for i in range(0, len(songInfo), 3):temp = songInfo[i:i + 3]song.append(temp)#print(len(song))file.write('{\n"songInfo":[\n')for i in range(0,len(song)):d = dict(zip(keys, song[i]))#print(d)file.write(json.dumps(d,ensure_ascii=False,indent=4,separators=(',', ': ')))if i != len(song)-1:file.write(',')file.write('\n]\n}')
def get_website_encoding(url):  # 一般每个网站自己的网页编码都是一致的,所以只需要搜索一次主页确定res = requests.get(url, headers=headers)charset = re.search("charset=(.*?)>", res.text)if charset is not None:blocked = ['\'', ' ', '\"', '/']filter = [c for c in charset.group(1) if c not in blocked]return ''.join(filter)  # 修改res编码格式为源网页的格式,防止出现乱码else:return res.encoding  # 没有找到编码格式,返回res的默认编码if __name__ == '__main__':encoding = get_website_encoding('http://www.kugou.com')#print(encoding)urls = ['http://www.kugou.com/yy/rank/home/{}-8888.html?from=rank'.format(str(i)) for i in range(1, 23)]
with open(r'.\kugou_500.json', 'w+', encoding=encoding) as f:#f.write("歌手         歌名          长度\n")for url in urls:get_info(url, f)time.sleep(1) #缓冲一秒,防止请求频率过快output(url,f)

得到的json文件

打开使用json.load打开文件,成功输出后代表文件格式正确

import jsonwith open("kugou_500.json",'r',encoding='UTF-8') as f:new_dict = json.load(f)print(new_dict)

第2题 编程生成CSV文件并转换成JSon格式
【实验要求】

  1. 编程生成CSV格式文件。文件内容如下: 姓名,性别,籍贯,系别 张迪,男,重庆,计算机系 兰博,男,江苏,通信工程系 黄飞,男,四川,物联网系 邓玉春,女,陕西,计算机系 周丽,女,天津,艺术系 李云,女,上海,外语系
  2. 将上述CSV格式文件转换成JSon格式,并查询文件中所有女生的信息。

【实验过程】(步骤、记录、数据、程序等)
请提供操作步骤及界面截图证明。

import csv
#创建文件对象
f = open("question02.csv","w",encoding="utf-8")
#构建csv写入对象
csv_writer = csv.writer(f)
#构建列表头
csv_writer.writerow(["姓名","性别","籍贯","系别"])
#写入csv文件内容
csv_writer.writerow(["张迪","男","重庆","计算机系"])
csv_writer.writerow(["兰博","男","江苏","通信工程系"])
csv_writer.writerow(["黄飞","男","四川","物联网系"])
csv_writer.writerow(["周丽","女","天津","艺术系"])
csv_writer.writerow(["李芸","女","上海","外语系"])


转换为json格式

import csv
import json
csvFile = open("question02.csv","r",encoding="utf-8")
jsonFile = open("question02.json","w",encoding="utf-8")fieldNames = {"姓名","性别","籍贯","系别"}
reader = csv.DictReader(csvFile)
i = 1
jsonFile.write('{\n"personInfo":[\n')
for row in reader:print(row)jsonFile.write(json.dumps(row,ensure_ascii=False,indent=4))if i != 5:jsonFile.write(',')i = i+1
jsonFile.write('\n]\n}')

import json
with open("question02.json","r",encoding="utf-8") as f:data = json.load(f)#print(data['personInfo'][1]['性别'])#print(type(data))for i in range(0,5):if data['personInfo'][i]['性别'] == '女':print(data['personInfo'][i])

第3题. XML格式文件与JSon的转换
【实验内容集要求】
(1) 读取以下XML格式的文件,内容如下: <?xml
version=”1.0” encoding=”gb2312”> <图书> <书名>红楼梦</书名> <作者>曹雪芹</作者><主要内容>描述贾宝玉和林黛玉的爱情故事</主要内容> <出版社>人民文学出版社</出版社> </图书>
(2) 将以上XML格式文件转换成JSon格式。

【实验过程】(步骤、记录、数据、程序等)
请提供相应代码及程序运行界面截图。

新建xml文件

import xml.dom.minidom
import xmltodict
import json
#打开xml文档
#dom = xml.dom.minidom.parse('question_03.xml')
#得到文档元素对象
#root = dom.documentElement
#bb = root.getElementsByTagName('书名')
#print(bb[0].firstChild.data)#获取xml文件
file = open("question_03.xml","r",encoding="utf-8")
#读取文件内容
xmlStr = file.read()
#print(xmlStr)
jsonStr = xmltodict.parse(xmlStr)
#print(jsonStr)
with open("question03JSON.json","w",encoding="utf-8") as f:f.write(str(json.dumps(jsonStr,ensure_ascii=False,indent=4,separators=(',', ': '))))

数据导入与预处理实验二---json格式文件转换相关推荐

  1. 数据导入与预处理-第4章-数据获取python读取pdf文档

    数据导入与预处理-第4章-数据获取Python读取PDF文档 1 PDF简介 1.1 pdf是什么 2 Python操作PDF 2.1 pdfplumber库 2.2 pdfplumber基本操作 2 ...

  2. 数据导入与预处理-拓展-pandas时间数据处理01

    数据导入与预处理-拓展-pandas时间数据处理01 Pandas时序数据系列博客 Pandas时间序列数据处理 1.好用的Python库 2.Pandas历史 3.时序数据处理 3.1 时序中的基本 ...

  3. sex 无需下载_js读取本地json格式文件数据的几种实现方法,内有vue读取json示例代码。...

    方法一:通过getJSON实现 getJSON是jquery提供的读取json格式文件的方法 首先我们将html中引入jquery,可以通过百度CDN引入,代码如下: 然后就可以在script中使用g ...

  4. wcf html 界面,WCF数据转换为原始html而不是Json格式

    WCF很新颖,几乎所有的东西都可以工作,除了从JQuery到WCF的文章.WCF数据转换为原始html而不是Json格式 Jquery正在处理DynaTree并将数据发布到WCF服务. 目前为止这么好 ...

  5. 数据导入与预处理-第5章-数据清理

    数据导入与预处理-第5章-数据清理 1. 数据清理概述 1.1 数据清理概述 1.2 什么是缺失值 1.3 什么是重复值 1.4 什么是异常值 2. 数据清理案例 2.1 缺失值处理 2.1.1 缺失 ...

  6. 如何将csv格式文件转换为Json格式文件?

    如何使用python将csv格式文件转换为Json格式文件? 文章目录 如何使用python将csv格式文件转换为Json格式文件? 前言 一.使用execl方式打开csv文档 二.python转换代 ...

  7. JavaScript对象与JSON格式的转换

    在Web开发中,JavaScript和JSON是两个经常用到的概念.JavaScript是一种脚本语言,可以用来操作网页的内容和行为,而JSON是一种轻量级的数据交换格式,通常用于在客户端和服务器之间 ...

  8. json格式文件取出所有key的通用方法(python)

    json格式文件取出所有key的通用方法(python) 在接口测试时候,我们难免会遇到接口返回关键字查验,有时由于数据量庞大,手工测试成本很高,但是接口自动化时,发现实际key值嵌套比较复杂. de ...

  9. 教你批量将 JSON 格式文件转为思维导图

    概要:「我的ABC软件工具箱」提供了强大的格式转换的功能,其中就包括将了 JSON 格式的文件转为思维导图的功能,能够轻松实现将不易于读的 JSON 文件转为可读性非常高的思维导图.转换操作非常简单, ...

最新文章

  1. MyBatis01 Idea中搭建MyBatis开发环境
  2. 如何系统性的分析一个新idea的可行性?
  3. 信息系统项目管理师-项目整体、收尾、变更管理考点笔记
  4. 弹窗页面交互_UI进阶知识-信息提交类弹窗该如何设计?
  5. [转]迭代、集合、字典表和列表
  6. 两场直播丨 手把手安装搭建GoldenDB、基于IB网络的Oracle Extend RAC最佳实践
  7. ECCV 2018丨YOLO遇上OpenPose,近200FPS的高帧数多人姿态检测
  8. java 线程池的使用_Java 使用线程池执行若干任务
  9. CentOS 6.5设置静态IP教程 并且可以ping通
  10. 北大《中文核心期刊要目总览》2020版目录人文、社会科学
  11. 心理学与生活-南京大学-陈昌凯-中国大学MOOC慕课-各章测试题答案
  12. 如何提高团队开发质量
  13. 2021年全球及中国天然橡胶产量、消费量及价格走势分析:中国市场需求量急速增涨[图]
  14. 各种排序算法、十大排序算法
  15. Excel表格的密码设置与取消
  16. 数字图像处理——图像退化(大气湍流模型与运动模糊模型)与图像复原(逆滤波与维纳滤波)
  17. win10安装jdk11
  18. bat批处理循环执行adb命令,非科班面试之旅
  19. C++: 日程安排(多继承+友元函数)
  20. 如何在Android上显示wmf的文件

热门文章

  1. unity3D 鼠标点击游戏物体碰撞 (射线)
  2. c语言int输入1输出60000,数字的秘密问题分析(C语言)
  3. 关于声子和热输运计算中BORN电荷和non-analytic修正的问题
  4. NVIDIA主控CPU/GPU设置频率
  5. 数据库实践LAB大纲 02 检索
  6. 【IT职场】如何成为T型甚至A型人物。
  7. python方法测试生男孩女孩_用什么方法可以测出怀的是男孩女孩?还有如何才能生儿子?...
  8. php百度优化,百度技术沙龙第 24 期 PHP 性能优化实践
  9. Redis 3种集群方式,别傻傻分不清!
  10. 批量安装/卸载/fore-stop apk的脚本