20211306 实验四 Python综合实践
学号 20211306 《Python程序设计》实验四报告
课程:《Python程序设计》
班级: 2113
姓名: 丁文博
学号:20211306
实验教师:王志强
实验日期:2022年5月29日
必修/选修: 公选课
一、实验要求
Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。
在华为ECS服务器(OpenOuler系统)和物理机(Windows/Linux系统)上使用VIM、PDB、IDLE、Pycharm等工具编程实现。
二、实验内容
做了人生中第一个用爬虫爬取数据的程序,爬取中国福彩网往期(100期)双色球的中奖号码、中奖人数、中奖金额及其他相关信息,并创建csv文件,将数据保存到里面。
首先引入一些模块

引入“request”、“pprint”、“csv”模块,分别用来发送请求、格式化输出以及保存数据并创建csv文件
向网站发送请求

打开网页检查界面,进入network界面

所需的数据就在Fetch/XHR中

点开preview界面,寻找检索到所需数据的那条信息,就是我们要爬取的对象

'Request URL'后就是我们需要的'url'

网站地址中?后的是具体数据,可以删掉。然后用请求参数接收下来

位置在payload中

接下来是请求头

接收爬取到的数据

- 到这里的时候print(response),出现'200'这个状态码,代表爬取成功

这里还有一个防盗链,但将防盗链屏蔽时成功运行,但将防盗链放进去的时候就会失败(报错显示着语法错误,标着那个冒号出错,但是将防盗链屏蔽就会消失)

将所需数据保存到json字典中
这里前面引入的pprint模块开始使用,并且输入pprint.pprint(response.json())

就会出现以上这样的结果,这就是格式化输出,我们需要把它们变为文本的格式
创建csv文件并保存数据

解析数据,提取所需内容,并对字典进行for遍历

用csv模块,创建'双色球.csv'文件,并对其进行读写,写表头(注意这里的表头需要和字典的顺序相同,否则会报错)

打印数据

创建出来的csv文件就像这样
三、问题以及解决办法
问题1:刚开始在写入表头时,一直不能创建成功文件
解决办法:检查代码,发现fieldnames写成了filednames,还上网查了许多关于这个报错的原因,最后发现却是单词拼错了。
问题2:创建csv文件后,保存的数据都是乱码

解决办法:把解码方式从'utf-8'改为'gbk'
四、代码
点击查看代码
import requests # 数据请求 第三方 pip install requests
import pprint #格式化输出
import csv #保存
f = open('双色球.csv','a+',encoding='gbk',newline='')
csv_writer = csv.DictWriter(f, fieldnames=['期号',
'开奖日期',
'红球',
'蓝球',
'一等奖中奖注数',
'一等奖中奖金额',
'二等奖中奖注数',
'二等奖中奖金额',
'三等奖中奖注数',
'三等奖中奖金额',
'四等奖中奖注数',
'四等奖中奖金额',
'五等奖中奖注数',
'五等奖中奖金额',
'六等奖中奖注数',
'六等奖中奖金额',
'一等奖中奖地区',
'奖池金额'])
csv_writer.writeheader() # 写入表头
# 发送请求的url地址
url = 'http://www.cwl.gov.cn/cwl_admin/front/cwlkj/search/kjxx/findDrawNotice'
# 快速替换 CTRL+r 正则表达式:”(.*?):(.*)“ 替换为 “'$1':'$2',”
params = {
'name': 'ssq',
'issueCount':'',
'issueStart':'',
'issueEnd':'',
'dayStart': '2021-05-20',
'dayEnd': '2022-05-20',
}
headers = {
# 'Referer': 'http://www.cwl.gov.cn/ygkj/wqkjgg/ssq/'
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.53'
}
response = requests.get(url=url, params=params, headers=headers)
# <> 对象 200 请求成功 状态码
result = response.json()['result']
# 解析数据 键值对取值 根据冒号左边的内容 提取冒号右边的内容
# for 遍历
for index in result:
dit={
'期号':index['code'],
'开奖日期': index['date'],
'红球': index['red'],
'蓝球': index['blue'],
'一等奖中奖注数': index['prizegrades'][0]['typenum'],
'一等奖中奖金额': index['prizegrades'][0]['typemoney'],
'二等奖中奖注数': index['prizegrades'][1]['typenum'],
'二等奖中奖金额': index['prizegrades'][1]['typemoney'],
'三等奖中奖注数': index['prizegrades'][2]['typenum'],
'三等奖中奖金额': index['prizegrades'][2]['typemoney'],
'四等奖中奖注数': index['prizegrades'][3]['typenum'],
'四等奖中奖金额': index['prizegrades'][3]['typemoney'],
'五等奖中奖注数': index['prizegrades'][4]['typenum'],
'五等奖中奖金额': index['prizegrades'][4]['typemoney'],
'六等奖中奖注数': index['prizegrades'][5]['typenum'],
'六等奖中奖金额': index['prizegrades'][5]['typemoney'],
'一等奖中奖地区': index['content'],
'奖池金额': index['poolmoney']
}
csv_writer.writerow(dit)
print(dit)
五、云上运行


六、实验体会
在这学期跟随王志强老师学习python的过程中,感受到了python作为一门编程语言独特的魅力,相比于其他编程语言,python更简便快捷,同时操作方面也更加简单,也有更多开源的库和模块可以使用。同时跟王志强老师也学习到了很多知识,像学长学姐说的一样,王老师讲的这门课果然是十分硬核、真正能够学到东西的一门课,在课堂上需要一直认真听老师讲解,不然就会跟不上老师的进度,但王老师是一位十分负责任的老师,如果出现了问题,他会随时解答,也会帮忙调试代码,虽然一边批评说你不会单步调试,但是也会一直帮助你直到代码成功运行下来。这学期我学到了关于python的很多东西,文件操作、数据库、爬虫、函数、面对对象的程序设计等,老师也将这些学习资料上传到了云班课上供我们学习。感谢老师的倾情付出,也感谢老师给我们对python细致又幽默的讲解,希望以后还能跟王老师学习到更多的东西!
20211306 实验四 Python综合实践的更多相关文章
- 实验四 Python综合实践
课程:<Python程序设计> 班级:1843 姓名:章森洋 学号:20184307 实验教师:王志强 实验日期:2020年5月16日 必修/选修: 公选课 1.实验内容 此处填写实验的具 ...
- 20201123 《python程序设计》实验四报告
20201123 2020-2021-2 <python程序设计>实验三报告 课程:<Python程序设计>班级:2011姓名:晏鹏捷学号:20201123实验教师:王志强实验 ...
- 20184302 2019-2020-2 《Python程序设计》实验四报告
20184302 2019-2020-2 <Python程序设计>实验四报告 课程:<Python程序设计> 班级: 1843 姓名: 李新锐 学号:184302 实验教师:王 ...
- 20212115朱时鸿 《python程序设计》实验四报告
课程:<Python程序设计>班级: 2121姓名: 朱时鸿学号:20212115实验教师:王志强实验日期:2022年5月28日必修/选修: 公选课 1.实验内容 Python综合应用:爬 ...
- Appium+python自动化(四十二)-Appium自动化测试框架综合实践- 寿终正寝完结篇(超详解)
1.简介 按照上一篇的计划,今天给小伙伴们分享执行测试用例,生成测试报告,以及自动化平台.今天这篇分享讲解完.Appium自动化测试框架就要告一段落了. 2.执行测试用例&报告生成 测试报告, ...
- Appium+python自动化(四十一)-Appium自动化测试框架综合实践 - 即将落下帷幕(超详解)
1.简介 今天我们紧接着上一篇继续分享Appium自动化测试框架综合实践 - 代码实现.到今天为止,大功即将告成:框架所需要的代码实现都基本完成. 2.data数据封装 2.1使用背景 在实际项目过程 ...
- Appium+python自动化(四十)-Appium自动化测试框架综合实践 - 代码实现(超详解)
1.简介 今天我们紧接着上一篇继续分享Appium自动化测试框架综合实践 - 代码实现.由于时间的关系,宏哥这里用代码给小伙伴演示两个模块:注册和登录. 2.业务模块封装 因为现在各种APP的层出不群 ...
- 20192204 2019-2020-2 《Python程序设计》实验四报告
20192204 2019-2020-2 <Python程序设计>实验四报告 课程:<Python程序设计> 班级: 1922 姓名: 李龙威 学号:20192204 实验教师 ...
- Appium+python自动化(三十八) - Appium自动化测试框架综合实践 - 框架简介-助你冲击高薪,迎娶白富美(超详解)
简介 好久没有更新博客了,博友们是不是有点等不及了.不好意思啊,中秋节过后太忙了,这篇是好不容易抽点零碎时间写的.从这一篇开始小伙伴或者童鞋们,就跟随宏哥的脚步,一步步的从无到有,从0到1的搭建一个完 ...
- Appium+python自动化(三十九)-Appium自动化测试框架综合实践 - 代码实现(超详解)
简介 经过一段时间的准备,完善的差不多了,继续分享有关Appium自动化测试框架综合实践.想必小伙伴们有点等不及了吧! driver配置封装 kyb_caps.yaml 配置表 参考代码 platfo ...
随机推荐
- springboot docker打包镜像
首先在idea中创建springboot项目,pom文件packaging 为jar ,然后编写接口. 编写Dockerfile 注意Dockerfile只能这样命名. 使用maven打包命令或者使用 ...
- 快速导出Redis某个List列表所有数据
Redis导出list数据 快速命令行 echo "lrange data_list_with_hash 0 25000" | ./redis-cli.exe -h 127.0.0 ...
- P12证书转BKS证书
安卓 识别的证书格式是bks ,而我之前生成的证书格式是p12 所以需要转换一下,至于怎么生成p12,请看我转载的的文章 Nginx https 双向认证. 1.请先下载第三方转换工具protecl ...
- java将Word转换成PDF方法
转载1:java将Word转换成PDF三种方法_pdfoptions_Zhsh-7的博客-CSDN博客 转载2:POI 实现 word转成pdf - 挽留匆匆的美丽 - 博客园 (cnblogs.co ...
- go 处理json
在云原生的相关技术中, 调用 kafka 和 es等中间件,返回的结果大多是 json 格式,因此我们需要频繁的对 json 进行操作. 在go这种强类型的语言中,不同于 python 和 nodej ...
- 记录一次在deepin安装node版本管理工具nvm的过程
安装nvm sudo apt-get install git -y # 安装git cd /home # 随便找个目录放代码 git clone https://github.com/nvm-sh/n ...
- 调度器42—进程exit退出流程
基于Linux-5.10 一.do_exit()简要流程 1. 执行路径 各驱动和内核机制中直接调用 SYSCALL_DEFINE1(exit, int, error_code) //exit.c 将 ...
- MyBatis_05(各种查询功能)
MyBatis各种查询功能: 如果查询出的数据只有 "一条",可以通过: 1-实体类对象接收 2-List集合接收 3-Map集合接收,结果{password=123456, se ...
- 尝试window10系统下使用appuim获取ios元素
一般来说搞iOS手机的APP自动化需通过Mac电脑,但当前APP出图自动化测试平台是基于windows系统环境开发.如果因iOS APP需要再重新搭建Mac的开发及测试环境,会很大程度上浪费资源,增加 ...
- JS——如果数组中的信息存在多个相同的属性,那么则将这些相同的信息放到同一个children中。
var arr = [ {name: '张三', age: 10, sex: '男'}, {name: '李四', age: 10, sex: '男'}, {name: '钱五', age: 11, ...