怎么用python抓取豆瓣上用户对电影的评分

怎么用python抓取豆瓣上用户对电影的评分,第1张

#!/usr/bin/env python2.7# encoding=utf-8"""

爬取豆瓣电影TOP250 - 完整示例代码凳棚

"""import codecsimport requestsfrom bs4 import BeautifulSoup

DOWNLOAD_URL = 'http://movie.douban.com/top250/'def download_page(url):

return requests.get(url, headers={'User-Agent'举粗基: 'Mozilla/5.0 (MacintoshIntel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36'

}).contentdef parse_html(html):

soup = BeautifulSoup(html)

movie_list_soup = soup.find('ol', attrs={'class': 'grid_view'})

movie_name_list = []for movie_li in movie_list_soup.find_all('li'):

detail = movie_li.find('div', attrs={'class': 'hd'})

movie_name = detail.find('span', attrs={'class': 'title'}).getText()

movie_name_list.append(movie_name)

next_page = soup.find('span', attrs={'正谨class': 'next'}).find('a')if next_page:return movie_name_list, DOWNLOAD_URL + next_page['href']return movie_name_list, Nonedef main():

url = DOWNLOAD_URLwith codecs.open('movies', 'wb', encoding='utf-8') as fp:while url:

html = download_page(url)

movies, url = parse_html(html)

fp.write(u'{movies}\n'.format(movies='\n'.join(movies)))if __name__ == '__main__':

main()

爬取时间:2020/11/25

系统环境:Windows 10

所用工具:Jupyter Notebook\Python 3.0

涉及的库:requests\lxml\pandas\matplotlib\numpy

蛋肥想法: 先将电影名称、原名、评分、评价人数、分类信息从网站上爬取下来。

蛋肥想法: print数据列表后发现电影原名、分类信息等存在不需要的字符,需预先处理;同时因为后续想做一个豆瓣电影TOP250的维度分布图,而同一电影存在多个发行国家、类型(如“法国 美国 / 剧情祥备 动作 犯罪”),为了简(偷)便(懒),这里均取第一个作为记入的数据;最后将数据保存为xlsx。

蛋肥想法: 蛋肥想知道在豆瓣电影TOP250中年份、国家、类型的维度数据,为了练手,使用刚带余才保存成xlsx的数据,并分别画成雷达图、柱形图、扇谨行毁形图。

MovieLens数据集是一个关于电影评分的数据集,里面包含了从IMDB, The Movie DataBase上面得到的用户对电影的评分信息,详细请看下面的介绍。

文件里面的内容是帮助你如何通过网站id在对应网站上找到对应的电影链接的。

movieId, imdbId, tmdbId

表示这部电影在movielens上的id,可以通过链接 https://movielens.org/movies/(movieId) 来得到。

表示悔悄宽这部电影在imdb上的id,可以通过链接 http://www.imdb.com/title/(imdbId)/

来得到。

movieId, title, genres

文件里包含了一部电影的id和标题,以及该电影的类别

movieId, title, genres

每部电影的id

电影的标题

电影的类别(详细分类见readme.txt)

文件里面的内容包含了每一个用户对于每一部电影的评分。

数据排序的顺序按照userId,movieId排列的。

文件里面的内容包含了每一个用户对于每一个电影的分类

数据排序的顺序按照userId,movieId排列的。

=======

该数据集(ml-latest-small)描述了电影推荐服务[MovieLens]( http://movielens.org )的5星评级和自由文本标记活动。它包含9742部电影的100836个评级和3683个标签应碧亮用程序。这些数据由610位用户在1996年3月29日到2018年9月24日之间创建。该数据集于2018年9月26日生成。

随机选择用户以包含在内。所有选定的用户评分至少20部电影。不包括人口统计信息。每个用户都由一个id表示,并且不提供其他信息。

数据包含在 links.csv , movies.csv , ratings.csv 和 tags.csv 文件中。有关所有这些文件的内容和用法的更多详细信息如下。

这是一个发展的数据集。因此,它可能会随着时间的推移而发生变化,并不是共享研究结果的适当数据集。

========

要确认在出版物中使用数据集,请引用运森以下文件:

========================

数据集文件以[逗号分隔值]文件写入,并带有单个标题行。包含逗号( , )的列使用双引号(```)进行转义。这些文件编码为UTF-8。如果电影标题或标签值中的重音字符(例如Misérables,Les(1995))显示不正确,确保读取数据的任何程序(如文本编辑器,终端或脚本)都配置为UTF-8。

MovieLens用户随机选择包含。他们的ID已经匿名化了。用户ID在 ratings.csv 和 tags.csv 之间是一致的(即,相同的id指的是两个文件中的同一用户)。

数据集中仅包含至少具有一个评级或标记的电影。这些电影ID与MovieLens网站上使用的电影ID一致(例如,id 1 对应于URL https://movielens.org/movies/1 )。电影ID在 ratings.csv , tags.csv , movies.csv 和 links.csv 之间是一致的.

通过[pandas.read_csv]将各表转化为pandas 的DataFrame对象

其中用到的参数为分隔符sep、头文件header、列名定义names、解析器引擎engine

这里和书上相比多用了engine参数,engine参数有C和Python,C引擎速度更快,而Python引擎目前功能更完整。

可用pandas.merge 将所有数据都合并到一个表中。merge有四种连接方式(默认为inner),分别为

通过索引器查看第一行数据,使用基于标签的索引.loc或基于位置的索引.iloc

可通过数据透视表( pivot_table )实现

该 *** 作产生了另一个DataFrame,输出内容为rating列的数据,行标index为电影名称,列标为性别,aggfunc参数为函数或函数列表(默认为numpy.mean),其中“columns”提供了一种额外的方法来分割数据。

by参数的作用是针对特定的列进行排序(不能对行使用),ascending的作用是确定排序方式,默认为升序

增加一列存放平均得分之差,并对其排序,得到分歧最大且女性观众更喜欢的电影

按照电影标题将数据集分为不同的groups,并且用size( )函数得到每部电影的个数(即每部电影被评论的次数),按照从大到小排序,取最大的前20部电影列出如下

按照电影名称分组,用agg函数通过一个字典{‘rating’: [np.size, np.mean]}来按照key即rating这一列聚合,查看每一部电影被评论过的次数和被打的平均分。取出至少被评论过100次的电影按照平均评分从大到小排序,取最大的10部电影。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12475030.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存