在这个项目中, 你将会从豆瓣电影的网页中获取你最爱的三个类别,各个地区的高评分电影,收集他们的名称、评分、电影页面的链接和电影海报的链接。最后对收集的数据进行简单的统计。
这个项目不会提供任何 python 代码,你应该新建文件 DoubanCrawler.py
, 并在其中逐个完成每个任务。注意这些任务并不是并列关系,后面的任务很可能需要用到前面任务的代码或函数,前面任务的对错也很可能会影响后面任务的对错。你可能会需要多次来回修改才能完成项目。
当然,即使你还没有全部完成,也可以提交项目来获取一些建议和反馈。
你可以从下面这个网址,按照分类和地区查看电影列表。
https://movie.douban.com/tag/#/?sort=S&range=9,10&tags=电影
分解 URL 可以看到其中包含
https://movie.douban.com/tag/#/
: 豆瓣电影分类页面sort=S
: 按评分排序range=9,10
: 评分范围 9 ~ 10tags=电影
: 标签为电影
其中参数tags可以包含多个以逗号分隔的标签,你可以分别选取类型和地区来进行进一步的筛选,例如选择类型为剧情
,地区为美国
, 那么 URL 为
https://movie.douban.com/tag/#/?sort=S&range=9,10&tags=电影,剧情,美国
实现函数构造对应类型和地区的URL地址
"""
return a string corresponding to the URL of douban movie lists given category and location.
"""
def getMovieUrl(category, location)
url = None
return url
获得URL后,我们可以获取 URL 对应页面的 HTML
在课程中,我们使用库 requests
get 函数。
import requests
response = requests.get(url)
html = response.text
这样的做法对大多数豆瓣电影列表页面来说没什么问题。但有些列表需要多页显示,我们需要不断模拟点击加载更多按钮来显示这个列表上的全部电影。
这个任务虽然不难,但并不是课程的重点。因此我们已经为你完成了这个任务。你只需要导入我们已经写好的文件,并调用库就可以了
import expanddouban
html = expanddouban.getHtml(url)
getHtml 还有两个可选参数,你 很有可能 需要传入非默认的值。
要使用这个写好的函数,你需要安装 selenium 和 chromedriver,你可以参考这份指南
电影类应该包含以下成员变量
- 电影名称
- 电影评分
- 电影类型
- 电影地区
- 电影页面链接
- 电影海报图片链接
同时,你应该实现电影类的构造函数。
name = “肖申克的救赎”
rate = 9.6
location = "美国"
category = "剧情"
info_link = "https://movie.douban.com/subject/1292052/"
cover_link = “https://img3.doubanio.com/view/movie_poster_cover/lpst/public/p480747492.jpg”
m = Movie(name, rate, location, category, info_link, cover_link)
通过URL返回的HTML,我们可以获取网页中所有电影的名称,评分,海报图片链接和页面链接,同时我们在任务1构造URL时,也有类型和地区的信息,因为我们可以完整的构造每一个电影,并得到一个列表。
实现以下函数
"""
return a list of Movie objects with the given category and location.
"""
def getMovies(category, location)
return []
提示:你可能需要在这个任务中,使用前三个任务的代码或函数。
从网页上选取你最爱的三个电影类型,然后获取每个地区的电影信息后,我们可以获得一个包含三个类型、所有地区,评分超过9分的完整电影对象的列表。将列表输出到文件 movies.csv
,格式如下:
肖申克的救赎,9.6,美国,剧情,https://movie.douban.com/subject/1292052/,https://img3.doubanio.com/view/movie_poster_cover/lpst/public/p480747492.jpg
霍伊特团队,9.0,香港,动作,https://movie.douban.com/subject/1307914/,https://img3.doubanio.com/view/movie_poster_cover/lpst/public/p2329853674.jpg
....
统计你所选取的每个电影类别中,数量排名前三的地区有哪些,分别占此类别电影总数的百分比为多少?
你可能需要自己把这个任务拆分成多个步骤,统计每个类别的电影个数,统计每个类别每个地区的电影个数,排序找到最大值,做一定的数学运算等等,相信你一定可以的!
请将你的结果输出文件 output.txt
在提交之前,根据项目评审标准检查你的项目。Udacity 的项目评审员会根据这个标准对你的项目给予反馈,并对你的代码给出有用的指导。
标准 | 符合要求 |
---|---|
代码质量 | 你的代码应具有良好的结构与可读性,请遵循本课程所指出的最佳规范。 |
不打印任何内容 | 你的代码应不会打印任何内容,而只是创建或修改两个文件 movies.csv 和 output.txt |
完成任务1 | 实现函数getMovieUrl |
完成任务2 | 通过 URL 获得豆瓣电影页面的 HTML |
完成任务3 | 定义电影类,并实现其构造函数 |
完成任务4 | 通过类型和地区构造URL,并获取对应的HTML。解析 HTML 中的每个电影元素,并构造电影对象列表 |
完成任务5 | 将电影信息输出到 movies.csv 。 包含类别、地区以及对应的电影信息 |
完成任务6 | 将电影的统计结果输出到 output.txt 。包含你选取的每个电影类别中,数量排名前三的地区有哪些,分别占此类别电影总数的百分比为多少。 |
请提交submit.zip, 包含以下文件:
- DoubanCrawler.py
- movies.csv
- output.txt
- 不要提交其他任何文件
注意运行 python DoubanCrawler.py
后,脚本应该会在同一个文件夹生成 movies.csv
和 output.txt
两个文件。