学号 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. js数组去重,删除重复的属性值

    let a=[] let hash={} a=a.reduce((pre,next)=>{ hash[next.name]?"":(hash[next.name]=true& ...

  2. 用tkinter编写一个获取图片资源的GUI工具

    目录 效果展示 导入tkinter库 窗口属性 按钮和输入框 文本输入框Text 运行 打包成exe文件 源码地址 本文可以学习到以下内容: 使用tkinter的Entry功能获取本地文件夹 使用tk ...

  3. boost.python编辑,以及c++api的python封装

    boost.python 编辑与踩坑 踩坑1.编辑的版本使用的vs版本不同的话,使用的命令不同 2.编辑第一条命令b2 toolset=msvc-11.0 --with-python报错:fatal ...

  4. 51电子-STC89C51开发板:开发包

    全部内容,请点击: 51电子-STC89C51开发板:<目录> ---------------------------  正文开始  --------------------------- ...

  5. mblink study111

    mblink study  https://gitee.com/dotnetchina/NanUIhttps://blog.csdn.net/u012814856/article/details/70 ...

  6. safari iframe 滚动问题(iframe--- iphone中的iframe没有滚动,要设置滚动;)

    _::-webkit-full-page-media, _:future, :root #frameBody>.frame-pnl{ overflow:auto; -webkit-overflo ...

  7. UI动画练习 - CABasicAnimation:视图绕X/Y轴旋转(3D效果)

    视图 3D 旋转 1 - 代码示例:以绕 X 轴旋转为例 1 #import "ViewController.h" 2 @interface ViewController () 3 ...

  8. Using Yocto Project with BeagleBone Black 英文版、Using Yocto Project with BeagleBone Black中文版

    Using Yocto Project with BeagleBone Black  手册英文版.中文版 https://market.m.taobao.com/app/idleFish-F2e/wi ...

  9. 高CPU Java应用分析

    模拟CPU 40%左右 import java.util.concurrent.CountDownLatch; public class Main extends Thread { private C ...

  10. Ftp连接-200 Switching to ASCII mode,227 Entering Passive Mode

    测试 ftp 服务器是否部署成功,最简单的方法,就是找个 windows 系统直连服务器,能连上就说明服务部署成功了.不过,有时候即使 ftp 服务部署成功了,windows 系统依然连接不上服务,这 ...