学号 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综合实践的更多相关文章

  1. 实验四 Python综合实践

    课程:<Python程序设计> 班级:1843 姓名:章森洋 学号:20184307 实验教师:王志强 实验日期:2020年5月16日 必修/选修: 公选课 1.实验内容 此处填写实验的具 ...

  2. 20201123 《python程序设计》实验四报告

    20201123 2020-2021-2 <python程序设计>实验三报告 课程:<Python程序设计>班级:2011姓名:晏鹏捷学号:20201123实验教师:王志强实验 ...

  3. 20184302 2019-2020-2 《Python程序设计》实验四报告

    20184302 2019-2020-2 <Python程序设计>实验四报告 课程:<Python程序设计> 班级: 1843 姓名: 李新锐 学号:184302 实验教师:王 ...

  4. 20212115朱时鸿 《python程序设计》实验四报告

    课程:<Python程序设计>班级: 2121姓名: 朱时鸿学号:20212115实验教师:王志强实验日期:2022年5月28日必修/选修: 公选课 1.实验内容 Python综合应用:爬 ...

  5. Appium+python自动化(四十二)-Appium自动化测试框架综合实践- 寿终正寝完结篇(超详解)

    1.简介 按照上一篇的计划,今天给小伙伴们分享执行测试用例,生成测试报告,以及自动化平台.今天这篇分享讲解完.Appium自动化测试框架就要告一段落了. 2.执行测试用例&报告生成 测试报告, ...

  6. Appium+python自动化(四十一)-Appium自动化测试框架综合实践 - 即将落下帷幕(超详解)

    1.简介 今天我们紧接着上一篇继续分享Appium自动化测试框架综合实践 - 代码实现.到今天为止,大功即将告成:框架所需要的代码实现都基本完成. 2.data数据封装 2.1使用背景 在实际项目过程 ...

  7. Appium+python自动化(四十)-Appium自动化测试框架综合实践 - 代码实现(超详解)

    1.简介 今天我们紧接着上一篇继续分享Appium自动化测试框架综合实践 - 代码实现.由于时间的关系,宏哥这里用代码给小伙伴演示两个模块:注册和登录. 2.业务模块封装 因为现在各种APP的层出不群 ...

  8. 20192204 2019-2020-2 《Python程序设计》实验四报告

    20192204 2019-2020-2 <Python程序设计>实验四报告 课程:<Python程序设计> 班级: 1922 姓名: 李龙威 学号:20192204 实验教师 ...

  9. Appium+python自动化(三十八) - Appium自动化测试框架综合实践 - 框架简介-助你冲击高薪,迎娶白富美(超详解)

    简介 好久没有更新博客了,博友们是不是有点等不及了.不好意思啊,中秋节过后太忙了,这篇是好不容易抽点零碎时间写的.从这一篇开始小伙伴或者童鞋们,就跟随宏哥的脚步,一步步的从无到有,从0到1的搭建一个完 ...

  10. Appium+python自动化(三十九)-Appium自动化测试框架综合实践 - 代码实现(超详解)

    简介 经过一段时间的准备,完善的差不多了,继续分享有关Appium自动化测试框架综合实践.想必小伙伴们有点等不及了吧! driver配置封装 kyb_caps.yaml 配置表 参考代码 platfo ...

随机推荐

  1. 存储单位bit、byte、KB、MB、GB、TB、PB、EB、ZB、YB、BB、NB、DB、CB、XB

    bit(binary digit)比特,这是表示信息的最小单位,它只能表示 0 或 1. byte(字节),其表示的值范围是0~255(无符号) 或 -127~127(有符号),1 byte = 8 ...

  2. docker+gunicorn+fastapi部署

    一.准备工作 1.先确保项目可以正常运行 2.使用pip freeze导出第三方库 3.在项目根目录新建pip.conf文件,写入一下内容 [global] index-url=http://pypi ...

  3. 26_自定义Loader

    自定义Loader loader就是对模块的源代码进行处理(转换),如css-loader.style-loader等 在上一篇的源代码中我们已经知道了loader是在runLoaders才会去使用l ...

  4. syntax_lead_x.txt

    select lead( t1.field_date-1, 1, null ) over(partition by t1.field_str order by t1.field_str),*from ...

  5. nginx,git,maven面试题

    1.简述一下什么是Nginx,它有什么优势和功能? Nginx是一个web服务器和方向代理服务器,用于HTTP.HTTPS.SMTP.POP3和IMAP协议.因 它的稳定性.丰富的功能集.示例配置文件 ...

  6. 疾速瓜牛 Linux三剑客 之 sed学习与应用

    sed, 是stream editor的缩写,顾名思义,就是个非交互式行编辑器,有以下特点: 它能执行与编辑器 vi 和 ex 相同的编辑任务 sed 编辑器没有提供交互式使用方式,使用者只能在命令行 ...

  7. JS回文检查(FreeCodeCamp项目)

    需求 如果传入的字符串是回文字符串,则返回 true. 否则返回 false 回文 palindrome,指在忽略标点符号.大小写和空格的前提下,正着读和反着读一模一样. 注意:检查回文时,你需要先去 ...

  8. vue高级进阶( 二 ) 8种组件通信详解

      vue高级进阶( 二 ) 8种组件通信详解 猛兽总是独行,牛羊才成群结队. -------鲁迅 vue组件通信的重要性无需多言...但是你肯定没有全部掌握,所以这第二篇文章应运而生 props和$ ...

  9. MySQL Delete 表数据后,磁盘空间并未释放,为什么?

    有开发小哥咨询了一个问题,记录一下处理过程分享给有需要的朋友.问题如下:MySQL数据库中有几张表增删比较频繁.数据变动剧烈且数据量大,导致数据增长过快,磁盘占用多.为了节约成本,定期进行数据备份,并 ...

  10. NC16644【字符串的展开】

    正确代码: #include <iostream>#include <algorithm>using namespace std;bool IsSame(char a, cha ...