20192221 2019-2020-2 《Python程序设计》实验四报告

课程:《Python程序设计》
班级:1922班
姓名:程子轩
学号:20192217
实验教师:王志强
实验日期:2020年5月25日
必修/选修: 公选课

实验内容选择

Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。

1.实验内容

爬取bilibili热门视频《后浪》中的弹幕,保存数据至Excel以及csv文件中,并声称词云(可视化)

2.实验过程及结果

实验分析:

爬数据——存文件——做词云

1.找到弹幕对应的网页api(F12,然后找list.so?oid)

2.获取我们需要的信息

requests.get → 解码 → 正则表达式提取(这里没必要使用beautifulsoup,故没用了)

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

CSV:先建一个CSV文件,然后逐条写入
xls:直接创建一个workbook和worksheet,然后逐条写入(因为太多了,所以我只存了前500条)

4.制作成词云

先打开CSV文件,作为统计数据来源 → 用jieba库做分词处理 → 打开原图片,作为你的框架
→ 设置生成词云的参数(颜色、字体等等) → 加入词语,保存图片文件

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.一开始词云里面全是乱码,通过查很多资料才发现在打开CSV文件时要加上编码。
3.from pycharts import wordcloud时 wordcloud一直标红,后来发现wordcloud已经挪出来了,直接import wordcloud

其他(感悟、思考等)

课程总结:

这学期python课除了python的基础语法外,我们还初步学习了数据库操作、网络编程、网络爬虫、办公初步自动化等,可谓是内容丰富,
其中更是加入了大量自学内容,对我们的自学能力提升很有帮助,也激发起了我对开发的兴趣。我还了解到python的功能强大,并打算在
人工智能方面下点功夫研究。相信在未来的学习中,python将会是一个很好地工具,助力我前行。英语打卡加分也是个惊喜吧,这也给了
我打卡的动力,免得像上学期总是懒。

感想体会:

此门课程可谓是极大程度上培养了我们的自学能力,与C语言不同,当初自学C语言时只需要跟着MOOC上的老师上课,并完成他给的练习题
即可,学习较为局限。而python则不一样,为了学习爬虫、网络编程等应用性较强,实战型强的内容,除了蓝墨云上的课程外,前前后后
还在广大互联网中寻找了大量的资源比如CSDN、简书、博客园、bilibili、MOOC、京东淘宝等等等等,才得以完善我们的技能,每一次作
业和实验都是大量信息检索的成果。记得为了完成这最后一项大作业,我在b站和MOOC上找了4、5个版本的教学视频来巩固练习,还在CSDN上
浏览了不同的材料最终才得以完成。王志强老师也很给力,非常认真负责,不仅培养了我自己解决问题的能力,还引领我走上了更加深远的道
路,细品更是发觉此门课程的意义甚至超于必修课程。最后希望自己在IT这方面能有所成绩吧。

建议:

①以后还是像后面那样课程中讲一遍内容吧,也算是对网上视频内容的复习。
②希望以后课程中的例子能更生动活泼一点,要是能紧跟潮流就更好了,比如说在涉及文本内容时写一些当红游戏,网络流行语什么的。
③可以课程中能讲解一些项目。