学号 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细致又幽默的讲解,希望以后还能跟王老师学习到更多的东西!

最新文章

  1. MicroERP软件更新记录2.0
  2. WPF:类型转换器的实现
  3. Java中length,length(),size()区别
  4. opencv学习_15 (利用cmake查看opencv的源码)
  5. new和delete malloc和free
  6. 使用Zabbix监控RabbitMQ
  7. java静态代码块、初始化块和构造方法的执行顺序
  8. 关于linux下零散的东西 --慢慢补充
  9. 哈希(1) hash的基本知识回顾
  10. iOS iOS8新特性--UIPopoverPresentationController
  11. Resharper使用
  12. 循环次数( M - 暴力求解、打表)
  13. iBatis多表查询
  14. JMeter 监控和记录&amp;常用功能
  15. angular控制器、服务和指令三者之间的关系
  16. 04_NoSQL数据库之Redis数据库:set类型和zset类型
  17. ALM 中查看某个 test 的更改 history 历史
  18. [EFCore]EntityFrameworkCore Code First 当中批量自定义列名
  19. layui 左侧三级菜单栏
  20. linux常用系统工作命令

热门文章

  1. React 使用链表遍历组件树
  2. Java多线程编程技术方案原理
  3. 【AD21】软件基础
  4. 3月1日至3月2日——数据结构与算法分析阅读笔记,线性表,AI。
  5. LocalDateTime与LocalDate
  6. go 的形参
  7. oracle中 null 和 &#39;&#39; 和&#39; &#39;的比对
  8. 没有可用软件包 iostat。
  9. Cadence Allegro创建盲埋孔
  10. BIP拓展js的使用