一、设计要求
猫眼电影排行榜爬取电影排行榜前100名的图片及片名(可延伸:可以将爬取电影的电影名称、主要演员、导演、上映时间、(评分)另存放在一个文本文件里),图片单独存放在一个文件夹里。
二、设计思路
爬虫代码
# 略。 # 略。 # 略。 # 略。 # 略。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 猫眼 ” 获取。👈👈👈
使用for循环遍历不同页数的排行榜页面,每页显示10条电影信息(offset参数控制分页)。
发送HTTP GET请求获取页面内容,并打印响应文本。
使用lxml.etree解析HTML,提取电影名称、主演、上映时间等信息。
获取电影图片链接,并下载图片到指定文件夹。
将抓取到的电影信息追加写入到data.csv文件中。
在每次数据提取时,使用try-except块捕获并跳过可能的错误。
for i in range(0, 11): name = html.xpath(r'//*[@class="name"]/a/text()')[i].strip() star = html.xpath(r'//*[@class="star"]/text()')[i].strip() rtim = html.xpath(r'//*[@class="releasetime"]/text()')[i].strip() imges = html.xpath(r'//*[@id="app"]//a/img[2]') print(imges) img = [elem.get("data-src") for elem in imges][0]
这段代码通过循环遍历猫眼电影排行榜页面,抓取电影的相关信息(名称、主演、上映时间等)并保存到CSV文件,同时下载电影图片并保存到本地。
- 数据创建和预处理
创建数据框
df = pd.DataFrame(data) # 创建一个包含电影名称、主演、二演、三演和上映时间的DataFrame。 # 提取上映年份和创建时间段分段 df['上映年份'] = df['上映时间'].apply(lambda x: x[:4]) bins = [1990, 2000, 2010, 2020, 2030] labels = ['1990-1999', '2000-2009', '2010-2019', '2020-2029'] df['上映时间段'] = pd.cut(df['上映年份'].astype(int), bins=bins, labels=labels, right=False)
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 猫眼 ” 获取。👈👈👈
三、可视化分析
2.1 柱状图:每个时间段上映的电影数量
period_counts = df['上映时间段'].value_counts().sort_index() plt.figure(figsize=(10, 6)) period_counts.plot(kind='bar', color='skyblue') plt.xlabel('上映时间段') plt.ylabel('电影数量') plt.title('每个时间段上映的电影数量') plt.show()
统计每个时间段的电影数量。
使用plt.figure设置图表的大小。
使用period_counts.plot绘制柱状图。
设置图表的x轴标签、y轴标签和标题。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 猫眼 ” 获取。👈👈👈
2.2 饼图:电影主演分布(前10名)
actor_counts = df['主演'].value_counts().nlargest(10) plt.figure(figsize=(10, 6)) actor_counts.plot(kind='pie', autopct='%1.1f%%', startangle=140, colors=plt.cm.Paired(range(len(actor_counts)))) plt.ylabel('') plt.title('电影主演分布(前10名)') plt.show()
统计主演出现次数最多的前10名。
使用actor_counts.plot绘制饼图。
autopct='%1.1f%%'用于显示百分比。
startangle=140用于设置饼图的起始角度。
colors=plt.cm.Paired(range(len(actor_counts)))用于设置饼图的颜色。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 猫眼 ” 获取。👈👈👈
2.3 词云:电影名称
wordcloud = WordCloud(font_path='SimHei.ttf', width=800, height=400, background_color='white').generate(' '.join(df['名称'])) plt.figure(figsize=(10, 5)) plt.imshow(wordcloud, interpolation='bilinear') plt.axis('off') plt.title('电影名称词云') plt.show()
使用WordCloud库生成词云。
设置字体路径、宽度、高度和背景颜色。
将电影名称拼接成一个字符串生成词云。
使用plt.imshow显示词云,并关闭坐标轴显示。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 猫眼 ” 获取。👈👈👈