一、实验要求

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