20192221 2019-2020-2 《Python程序設計》實驗四報告

課程:《Python程序設計》
班級:1922班
姓名:程子軒
學號:20192217
實驗教師:王志強
實驗日期:2020年5月25日
必修/選修: 公選課

實驗內容選擇

Python綜合應用:爬蟲、數(shù)據(jù)處理、可視化、機器學習、神經(jīng)網(wǎng)絡、游戲、網(wǎng)絡安全等。

1.實驗內容

爬取bilibili熱門視頻《后浪》中的彈幕,保存數(shù)據(jù)至Excel以及csv文件中,并聲稱詞云(可視化)

2.實驗過程及結果

實驗分析:

爬數(shù)據(jù)——存文件——做詞云

1.找到彈幕對應的網(wǎng)頁api(F12,然后找list.so?oid)

2.獲取我們需要的信息

requests.get → 解碼 → 正則表達式提取(這里沒必要使用beautifulsoup,故沒用了)

3.存入CSV文件和XLS文件中

CSV:先建一個CSV文件,然后逐條寫入
xls:直接創(chuàng)建一個workbook和worksheet,然后逐條寫入(因為太多了,所以我只存了前500條)

4.制作成詞云

先打開CSV文件,作為統(tǒng)計數(shù)據(jù)來源 → 用jieba庫做分詞處理 → 打開原圖片,作為你的框架
→ 設置生成詞云的參數(shù)(顏色、字體等等) → 加入詞語,保存圖片文件

5.源代碼

`

import requests
import re
import csv
import jieba
import wordcloud
import PIL.Image as image
import numpy as np
import xlwt

def down_danmu():
url = "https://api.bilibili.com/x/v1/dm/list.so?oid=186803402"

r = requests.get(url)

html = r.content.decode('utf-8')

res = re.compile('<d.*?>(.*?)</d>')

barrage = re.findall(res, html)

for i in barrage:
    with open('./后浪彈幕.csv', 'a', newline='', encoding='utf-8-sig') as f:
        writer = csv.writer(f)
        danmu = []
        danmu.append(i)
        writer.writerow(danmu)




print("save in excel...")
workbook = xlwt.Workbook(encoding="utf-8",style_compression=0)
worksheet = workbook.add_sheet('《后浪》彈幕情況',cell_overwrite_ok=True)
col = ("彈幕情況",)
worksheet.write(0,0,col[0])
for i in range(0,500):
    data = barrage[i]
    worksheet.write(i+1,0,data)
workbook.save('后浪彈幕.xls')
print("文件寫入成功!")

def showPic():
f = open('./后浪彈幕.csv',encoding='utf-8')
txt = f.read()
txt_list = jieba.lcut(txt)
# print(txt_list)
string = " ".join(txt_list)
print(string)

#img = np.array(image.open('./bilibili.jpg'))
img = np.array(image.open('./bili.jpg'))
w = wordcloud.WordCloud(
    width=1000,
    height=700,
    background_color='white',
    font_path='msyh.ttc',
    mask=img,
    scale=15,
    stopwords={' '},
    #contour_color='white',
    #contour_width=10,
)
w.generate(string)
w.to_file('./demo5.png')
f.close()

down_danmu()
showPic()

`

6.碼云鏈接:https://gitee.com/python_programming/czx/commit/27b65e392f062e11e6b8d33e4d3290d270c843a4

7.成果展示:

5. 實驗過程中遇到的問題和解決過程

1.最大的問題,至今仍未解決:此段代碼運行一段時間后電腦會卡死,初步排除內存、CPU過載的問題,但是究竟是什么原因仍無法找到。
2.一開始詞云里面全是亂碼,通過查很多資料才發(fā)現(xiàn)在打開CSV文件時要加上編碼。
3.from pycharts import wordcloud時 wordcloud一直標紅,后來發(fā)現(xiàn)wordcloud已經(jīng)挪出來了,直接import wordcloud

其他(感悟、思考等)

課程總結:

這學期python課除了python的基礎語法外,我們還初步學習了數(shù)據(jù)庫操作、網(wǎng)絡編程、網(wǎng)絡爬蟲、辦公初步自動化等,可謂是內容豐富,
其中更是加入了大量自學內容,對我們的自學能力提升很有幫助,也激發(fā)起了我對開發(fā)的興趣。我還了解到python的功能強大,并打算在
人工智能方面下點功夫研究。相信在未來的學習中,python將會是一個很好地工具,助力我前行。英語打卡加分也是個驚喜吧,這也給了
我打卡的動力,免得像上學期總是懶。

感想體會:

此門課程可謂是極大程度上培養(yǎng)了我們的自學能力,與C語言不同,當初自學C語言時只需要跟著MOOC上的老師上課,并完成他給的練習題
即可,學習較為局限。而python則不一樣,為了學習爬蟲、網(wǎng)絡編程等應用性較強,實戰(zhàn)型強的內容,除了藍墨云上的課程外,前前后后
還在廣大互聯(lián)網(wǎng)中尋找了大量的資源比如CSDN、簡書、博客園、bilibili、MOOC、京東淘寶等等等等,才得以完善我們的技能,每一次作
業(yè)和實驗都是大量信息檢索的成果。記得為了完成這最后一項大作業(yè),我在b站和MOOC上找了4、5個版本的教學視頻來鞏固練習,還在CSDN上
瀏覽了不同的材料最終才得以完成。王志強老師也很給力,非常認真負責,不僅培養(yǎng)了我自己解決問題的能力,還引領我走上了更加深遠的道
路,細品更是發(fā)覺此門課程的意義甚至超于必修課程。最后希望自己在IT這方面能有所成績吧。

建議:

①以后還是像后面那樣課程中講一遍內容吧,也算是對網(wǎng)上視頻內容的復習。
②希望以后課程中的例子能更生動活潑一點,要是能緊跟潮流就更好了,比如說在涉及文本內容時寫一些當紅游戲,網(wǎng)絡流行語什么的。
③可以課程中能講解一些項目。