20211414董准 《Python程序设计》实验四报告

20211414 2021-2022-2 《Python程序设计》实验四报告

课程:《Python程序设计》
班级: 2114
姓名: 董准
学号:20211414
实验教师:王志强
实验日期:2022年5月29日
必修/选修: 公选课

1.实验内容:

爬取豆瓣网站评分前二百五十名的电影相关信息,并存储到XLS工作表里。

2.实验要求:

Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。
课代表和各小组负责人收集作业(源代码、视频、综合实践报告)

注:在华为ECS服务器(OpenOuler系统)和物理机(Windows/Linux系统)上使用VIM、PDB、IDLE、Pycharm等工具编程实现。

批阅:注意本次实验不算做实验总分,前三个实验每个实验10分,累计30分。本次实践算入综合实践,打分为25分。
评分标准:
(1)程序能运行,功能丰富。(需求提交源代码,并建议录制程序运行的视频)10分
(2)综合实践报告,要体现实验分析、设计、实现过程、结果等信息,格式规范,逻辑清晰,结构合理。10分。
(3)在实践报告中,需要对全课进行总结,并写课程感想体会、意见和建议等。5分

(4)如果没有使用华为云服务(ECS或者MindSpore均可),本次实践扣10分。

注意:每个人的实验不能重复,课代表先统计大家做的内容并汇总,有重复的需要自行协商。

3.实验过程及结果

(1)首先选择要爬取的网站,经过检测后该网站数据可以爬虫获得,没有设置防爬虫措施。


(2)代码
首先引入库

主要的就是requests库,用于爬虫需要

利用cvs库主要目的是要讲爬虫获得的数据存储到XLS工作表中,需要cvs库来进行可视化,否则无法进行后续的内容。

之后这是主要爬取的内容,包括电影名字,发行时间,评分,观看量。

下面就要对爬虫内容格式化。

由于该网站是每25个电影一个页面,所以要写一个for循环,从0到250,每25个进行一次循环,一次爬取其中的数据。

最后对文件进行操作。
以下是代码运行截屏

这样就成功在代码所在文件夹生成了爬虫得到的数据表。
在运行之前文件夹里只有代码

运行成功之后就自动生成了XLS工作表

里面的内容正是我们要爬取得到的数据

之后在华为云上也进行了运行。
先检查了一下自己的putty上的python版本是否是python3,比较幸运的是刚好是3版本不是2版本,否则又要把python删除重新装新的了,那就更麻烦了。

之后就直接使用pip install安装了requests库,安装也十分顺利。

经过了这些准备工作,代码就可以正常运行啦

代码运行成功之后,win scp中就出现了我们想要得到的数据表。


打开之后和之前在pycharm中运行得到的是一样的,这样就大功告成啦!

下面是我的源代码

# coding=utf-8
import re
import requests
import csv


header = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36 Edg/97.0.1072.62'
}

obj = re.compile(r'<li>.*?<div class="item">.*?<span class="title">(?P<name>.*?)</span>.*?<p class="">.*?<br>(?P<year>.*?)&nbsp.*?<span class="rating_num" '
                    r'property="v:average">(?P<score>.*?)</span>.*?<span>(?P<people>.*?)人评价</span>',re.S)

f = open('datade.csv',mode="w+",encoding='utf-8',newline='')
for a in range(0,250,25):
    url = f'https://movie.douban.com/top250?start={a}'
    resp = requests.get(url,headers=header)
    page_content = resp.text
   
    result = obj.finditer(page_content)
    
    csvwriter = csv.writer(f)
    for it in result:
        dic = it.groupdict()
        dic['year']=dic['year'].strip()
        csvwriter.writerow(dic.values())
f.close
    
resp.close()

代码已经上传到码云了,链接如下
https://gitee.com/dong-zhun/codes/5jq9e7oumldtps38nvc4192
![](https://img2022.cnblogs.com/blog/2551064/202205/2551064-20220529015749962-1447722165.png

3.实验中遇到的问题和解决办法

问题1:在pycharm中运行的时候缺少requests库,但是自己已经pip install过了,检查也发现已经下载,就是没法用。

解决方法:后来在百度之后发现可以直接在pycharm里面下载库,使用setting,在里边下载好就可以直接用,解决了一大烦恼。


之后代码就不会出现缺少库的问题了。

问题2:在运行代码的时候出现了这样的报错:

之后到CSDN上查找相关报错发现,自己没有加上encoding='utf-8',导致编译有问题,加上之后程序就好了起来。

4.感悟

经过这一学期学习,我掌握了Python的语言基础、流程控制语句、序列的应用、有关字符串的操作、文件操作、异常处理,学习了解了正则表达式、网络爬虫、Socket编程、Python操作数据库等等。

同时,我还在原先的认知水平上又了解到了Git这样一个平台,对于未来的学习大有帮助。其中令我感触最深的就是Python的第三方库的数量之多、覆盖面之广,利用这些第三方库可以轻松实现许多复杂的功能,对于深入学习和创新实践大有裨益。

本次实验作为最后的综合实验,这篇实验报告的总结也是全课的总结。本次实验中,我综合运用了之前学过的很多知识,如格式化、各类语句、正则表达、面向对象程序设计等等,同时在实验中也学习到了Python的爬虫知识,做到了学以致用。我学习到了本专业专业课上学习不到的许多新知识,并且实现了自我创造,不但收获了知识,也收获了满足感。

本学期的课程中,我从认识Python开始,一步一步从学习字符类型、循环条件语句走来,如今我已经能够编写一个小的爬虫软件,虽然功能说不上强大,界面也算不上美观,但是对于我本人的来说,我认为我还是收获很大的。本课给我最大的体会就是——实践出真知,每次作业我都会遇上或多或少的难题,但是每次都能够得到解决,在解决问题中收获很多新知识。同时,在这一个学期的学习中,我深刻了解到学习习惯与学习态度的重要性,前者在本课中主要体现在每次作业的完成时限中,后者主要体现在每次作业的内容中。

王老师的课真的是让我受益匪浅,对于课堂的建议:
1.我觉得可以在课前就把本节课要讲的主要知识给大家说一下,大家也可以针对性的采取预习,并把课件也发送到群里让大家提前学习一下,这样的话在课上就能如鱼得水。
2.有的时候跟着老师现敲代码,可能速度跟不上,如果可以在课前就把代码跟着课件敲一遍,上课的时候就会好很多。
3.老师发送到云班课的视频数量有一些多,实在是看不完,老师可以酌情精简一下,这样大家能够更有重点的去学习。

最后的最后,还是十分感谢王老师一学期的教育与陪伴,实在是教会了自己很多东西,虽然是选修课,但是给自己带来的收获真的很多,自己也很高兴能够当王老师的课代表,如果再让自己选一次课,我一定还会毫不犹豫的选择python!

参考链接:
https://blog.csdn.net/java0fu/article/details/106013934?utm_term=pycharmwordcloud安装&utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2allsobaiduweb~default-0-106013934&spm=3001.4430

https://zhuanlan.zhihu.com/p/30742302

posted @ 2022-05-29 08:57  20211414董准  阅读(114)  评论(0)    收藏  举报