1. 程式人生 > 其它 >20211306 實驗四 Python綜合實踐

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細緻又幽默的講解,希望以後還能跟王老師學習到更多的東西!