文章目录

  • 一、项目背景
  • 二、项目代码
    • 2.1 相关包的导入
    • 2.2数据提取
    • 2.3 爬取数据
    • 2.4函数体
      • 2.4.1 爬取网页
      • 2.4.2 获取网页内容
      • 2.4.3 处理数据
    • 2.5 调用函数
    • 2.6 数据分析
  • 三、结果展示

一、项目背景

在学习之余需要放松身心,也需要得到有意义的提升,看电影成为大学生放松身心最主要的一种方法之一,此次项目收集了在猫眼电影上排名前100的电影,对电影进行筛选,即评分从高到低。
python版本:3.8
IDE:pycharm2021.1.1
要用到的库在cmd输入下载:pip install 库名 -i https://pypi.douban.com/simple
爬取的网站:https://www.maoyan.com/board/4

二、项目代码

2.1 相关包的导入

对程序中用到的库进行引入

import time  # 记录时间
import requests  # 得到服务器上的回复
from lxml import etree  # 对EXCEL表进行写操作
import xlwt  # 对EXCEL表进行读操作
from pyecharts import options as opts # python图形库
from pyecharts.charts import Bar  # 条形图,数据展示的样式
from pyecharts.charts import Pie  # 饼状图,数据展示的样式
import pandas as pd  # 数据分析,提取数据
import matplotlib.pyplot as plt  # 数据分析,展示数据
import wordcloud  # 词云库
import numpy as np  # 数字库

requests:用来抓取网页的HTML源代码
xlwt : 对EXCEL表进行读操作
lxml:对EXCEL表进行写操作
pandas:数据分析
pyecharts:用于生成 Echarts 图表的类库,其中Bar、Pie分别是将数据生成条形图、饼状图
wordcloud:词云库

2.2数据提取

影片详情链接的规则。所需要的字段在chrome用开发者工具查看网页源码,找到需要字段的相应位置:
第一步:打开chrome,右击检查,会出现元素栏

第二步:找到所需字段的相应位置,然后按照下图选项点击复制

    for page_html in board_html:img_link.extend(page_html.xpath('//img/@data-src'))film_link.extend(page_html.xpath('//*[@id="app"]/div/div/div[1]/dl/dd/div/div/div[1]/p[1]/a/@href'))film_name.extend(page_html.xpath('//*[@id="app"]/div/div/div[1]/dl/dd/div/div/div[1]/p[1]/a/@title'))star_org.extend(page_html.xpath('//*[@id="app"]/div/div/div[1]/dl/dd/div/div/div[1]/p[2]/text()'))releastime_org.extend(page_html.xpath('//*[@id="app"]/div/div/div[1]/dl/dd/div/div/div[1]/p[3]/text()'))integer.extend(page_html.xpath('//*[@id="app"]/div/div/div[1]/dl/dd/div/div/div[2]/p/i[1]/text()'))fraction.extend(page_html.xpath('//*[@id="app"]/div/div/div[1]/dl/dd/div/div/div[2]/p/i[2]/text()'))

2.3 爬取数据

进行数据爬取的编写

  • 定义爬取的url
    header用chrome的开发者工具获得:
    第一步:打开chrome,按F12,选择网络(Network)

第二步:重新访问该网站,点击第一个网络请求,查看它所对应的标头(header)

  • 爬取数据
  • 保存数据(xls或db)

2.4函数体

2.4.1 爬取网页

def scraping():board_urls = ['https://maoyan.com/board/4?offset={0}'.format(i) for i in range(0, 100, 10)]  # format(i)替代{}里面的值# 'User-Agent':模拟浏览器访问# 'Cookie':模拟登录,绕过滑动拼图验证headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) ''Chrome/84.0.4147.105 Safari/537.36','Cookie': 'mta=222214055.1603977692790.1605667197555.1605667216476.84; uuid_n_v=v1; ''uuid=A8B9B7F019E911EB9D95490677AB0FF651894580EC0942CDA95D1D5CD9BEE13D; ''_lxsdk_cuid=175748545b3c8-0d6dc6ca2c5b4d-3c634103-144000-175748545b3c8; ''_lxsdk=A8B9B7F019E911EB9D95490677AB0FF651894580EC0942CDA95D1D5CD9BEE13D; ''_lx_utm=utm_source%3DBaidu%26utm_medium%3Dorganic; ''__mta=222214055.1603977692790.1605606918555.1605606922430.33; ''_csrf=e50e37a20022fed414d7d479d61fb627bd72f61c2be692b12edc786fdb91dea2; ''Hm_lvt_703e94591e87be68cc8da0da7cbd0be2=1604192299,1605603303,1605612340,1605665922; ''Hm_lpvt_703e94591e87be68cc8da0da7cbd0be2=1605667216; _lxsdk_s=175d9259dda-76-0bc-84b%7C%7C32'}

2.4.2 获取网页内容

    # 获得全部页面信息存入列表中board_html = []for board_url in board_urls:  # 遍历刚才网页获取的值board_url_data = requests.get(board_url, headers=headers)board_url_html = etree.HTML(board_url_data.content.decode('UTF-8'))if board_url_html == None:print("爬取失败。。。")else:print(board_url + '爬取成功')board_html.append(board_url_html)time.sleep(0.5)return board_html

2.4.3 处理数据

def data_processing(board_html):img_link = []  # 图片链接film_link = []   # 影片链接index = [i for i in range(1, 101)]  # 序号film_name = []  # 影名star_org = []  # 还没处理过的主演信息movie_star = []  # 主演releastime_org = []  # 没有处理过的评分releastime = []  # 上映时间integer = []  # 评分整数部分fraction = []  # 评分小数部分score = []  # 评分# 数据提取for page_html in board_html:img_link.extend(page_html.xpath('//img/@data-src'))film_link.extend(page_html.xpath('//*[@id="app"]/div/div/div[1]/dl/dd/div/div/div[1]/p[1]/a/@href'))film_name.extend(page_html.xpath('//*[@id="app"]/div/div/div[1]/dl/dd/div/div/div[1]/p[1]/a/@title'))star_org.extend(page_html.xpath('//*[@id="app"]/div/div/div[1]/dl/dd/div/div/div[1]/p[2]/text()'))releastime_org.extend(page_html.xpath('//*[@id="app"]/div/div/div[1]/dl/dd/div/div/div[1]/p[3]/text()'))integer.extend(page_html.xpath('//*[@id="app"]/div/div/div[1]/dl/dd/div/div/div[2]/p/i[1]/text()'))fraction.extend(page_html.xpath('//*[@id="app"]/div/div/div[1]/dl/dd/div/div/div[2]/p/i[2]/text()'))# 数据处理for i in range(0, 100):# 将star_org中的反义字符'\n'、空格' '以及“主演:”去除movie_star.append(str(star_org[i]).replace('\n', '').strip()[3:])# 将releastime_org中的“上映时间:”去除releastime.append(str(releastime_org[i])[5:9])# 将评分的整数部分以及小数部分合并score.append(str(float(integer[i][0]) + float(fraction[i]) * 0.1))  #9.+6*0.1=9.6# data中存入经过处理的所有数据data = [img_link, film_link, index, film_name, movie_star, releastime, score]return data

2.5 调用函数

执行爬虫程序

def main():print("程序运行开始")print("开始爬取数据..")board_html = scraping()print("数据爬取成功!")print("开始处理数据")data = data_processing(board_html)print("数据处理完成")print("开始存储数据")print("将爬取数据存入Excel文件:")build_excel_file(data)print("数据存储完成")print("开始可视化数据")if __name__ == '__main__':main()

2.6 数据分析

data = pd.read_excel('猫眼电影榜单Top100.xls') #读取xlsx里面的值给datascore_chart = data.sort_values('评分',ascending=False).head(10) #用data里面的按值排序,head(i),i代表前i名。
bar = (Bar().add_xaxis([i for i in score_chart['电影名称'].values.tolist()]).add_yaxis('评分排前十的电影', score_chart['评分'].values.tolist())
)
bar.render(r"D:\neusoft\ChenHanBin\anli&add\pycharm2021\program\数据分析B\评分条形图.html")
print("评分图保存成功!")release_time = data.sort_values('评分',ascending=False).head(10) #用data里面的按值排序,head(i),i代表前i名。
bar = (Bar().add_xaxis([i for i in release_time['电影名称'].values.tolist()]).add_yaxis('评分排前十的电影年份', release_time['上映时间'].values.tolist())
)
bar.render(r"D:\neusoft\ChenHanBin\anli&add\pycharm2021\program\数据分析B\上映时间条形图.html")
print("上映时间图保存成功!")sector_chart = data.sort_values('评分',ascending=False).head(10)
v = sector_chart['电影名称'].values.tolist()   #tolist()将数据转换为列表形式
d = sector_chart['评分'].values.tolist()
color_series = ['#2C6BA0','#2B55A1','#2D3D8E','#44388E','#6A368B''#7D3990','#A63F98','#C31C88','#D52178','#D5225B']
# 实例化Pie类
pie1 = Pie(init_opts=opts.InitOpts(width='1350px', height='750px'))
# 设置颜色
pie1.set_colors(color_series)
# 添加数据,设置饼图的半径
pie1.add("", [list(z) for z in zip(v, d)], #zip是压缩函数radius=["0%", "100%"],center=["50%", "50%"],rosetype="area")
pie1.set_global_opts(title_opts=opts.TitleOpts(title='前十影片的评分'),legend_opts=opts.LegendOpts(is_show=False),toolbox_opts=opts.ToolboxOpts())
# 设置系列配置项
# LabelOpts标签配置项  is_show是否显示标签;  font_size字体大小;
# position="inside"标签的位置,文字显示在图标里面; font_style文字风格
# font_family文字的字体系列
pie1.set_series_opts(label_opts=opts.LabelOpts(is_show=True, position="inside", font_size=12,formatter="{b}:{c}", font_style="italic",font_weight="bold", font_family="Microsoft YaHei"),)
# 生成html文档
pie1.render(r"D:\neusoft\ChenHanBin\anli&add\pycharm2021\program\数据分析B\评分玫瑰图.html")
print("前十影片评分图保存成功!")#根据播放量排序,只取前十个
word_cloud = data.sort_values('评分',ascending=False).head(10)
#print(dw["影片中文名"])
#font_path指明用什么样的字体风格,这里用的是电脑上都有的微软雅黑
w1 = wordcloud.WordCloud(width=1200,height=1000,background_color='white',font_path='msyh.ttc')
txt = "\n".join(i for i in word_cloud['电影名称'])
w1.generate(txt)
w1.to_file(r'D:\neusoft\ChenHanBin\anli&add\pycharm2021\program\数据分析B\排名前10的影片名词云.png')
print("词云图保存成功!")
print("数据可视化完成")

三、结果展示

前十影片评分玫瑰图

前十影片评分条形图

排名前10的影片词云

猫眼电影榜单Top100

[爬虫项目]猫眼电影TOP100相关推荐

  1. Python3 爬虫实战 — 猫眼电影TOP100【requests、lxml、Xpath、CSV 】

    爬取时间:2019-09-23 爬取难度:★☆☆☆☆☆ 请求链接:https://maoyan.com/board/4 爬取目标:猫眼电影 TOP100 的电影名称.排名.主演.上映时间.评分.封面图 ...

  2. csv中包含多余换行符_Python3爬虫之猫眼电影TOP100(requests、lxml、Xpath、CSV)

    点击关注,我们共同每天进步一点点! [1x00]循环爬取网页模块 观察猫眼电影TOP100榜,请求地址为:https://maoyan.com/board/4 每页展示10条电影信息,翻页观察 url ...

  3. 【python爬虫】猫眼电影TOP100电影封面下载

    在上次爬取信息的基础上下载图片. 下载挺容易的 在封面命名上画了大笔时间..... import requests import bs4 from bs4 import BeautifulSoup i ...

  4. python爬电影_Python爬虫项目--爬取猫眼电影Top100榜

    本次抓取猫眼电影Top100榜所用到的知识点: 1. python requests库 2. 正则表达式 3. csv模块 4. 多进程 正文 目标站点分析 通过对目标站点的分析, 来确定网页结构, ...

  5. 爬虫从头学之Requests+正则表达式爬取猫眼电影top100

    爬取思路 当我们想要爬取一个页面的时候,我们要保证思路清晰,爬虫的思路分四个步骤,发起请求,获取响应内容,解析内容,存储内容.根据这四个内容我们的思路就很清晰.以下为具体步骤 使用requests库爬 ...

  6. 【Python爬虫】猫眼电影榜单Top100

    这是一个入门级的Python爬虫,结构易于理解.本文对编写此爬虫的全过程进行了讲述.希望对大家的Python爬虫学习有所帮助. 一.目标 爬取猫眼电影榜单Top100,将数据存入Excel文件中,并利 ...

  7. 爬虫,爬取猫眼电影Top100的电影名与评分

    ** 爬虫,爬取猫眼电影Top100的电影名与评分 ** import requests import threading import reclass maoyan_top500(threading ...

  8. 网络爬虫-猫眼电影top100

    接下来的一个月将更新多个网络爬虫的博文,同时也是分享自己在网络爬虫道路上的磕磕绊绊,学习和成长的历程. 今天的网络爬虫是爬取猫眼电影top100,实现分页爬取,然后保存在本地txt文本上. url : ...

  9. python爬虫入门练习:BeautifulSoup爬取猫眼电影TOP100排行榜,pandas保存本地excel文件

    传送门:[python爬虫入门练习]正则表达式爬取猫眼电影TOP100排行榜,openpyxl保存本地excel文件 对于上文使用的正则表达式匹配网页内容,的确是有些许麻烦,替换出现任何的差错都会导致 ...

  10. python爬虫猫眼电影票房_python爬取猫眼电影top100排行榜

    爬取猫眼电影TOP100(http://maoyan.com/board/4?offset=90) 1). 爬取内容: 电影名称,主演, 上映时间,图片url地址保存到mariadb数据库中; 2). ...

最新文章

  1. 2020年,图机器学习的趋势有哪些?
  2. 零基础学python视频百度云-零基础入门学习Python 小甲鱼视频教程
  3. python输入一个字母_python – Tkinter输入的第一个字母
  4. Java时区处理初学者指南
  5. offer该怎么选:大公司or小公司?高薪or期权?
  6. 在C 编程语言中 静态数组的替代模板,以编译方式在C ++中编译时创建静态数组...
  7. SQL锁机制和事务隔离级别
  8. 新手如何使用Docker来搭建PHP开发环境?
  9. 调用第三方接口发送短信
  10. php gmssl,gmssl
  11. 娱乐游戏及计算机动画论文,有关游戏美术设计论文
  12. rstudio中读取数据_Rstudio操作数据库
  13. 外国参考文献计算机类,计算机毕业设计外文参考文献.docx
  14. js获取服务器时间,并以北京时区显示
  15. AI配对真能解决“单身公害”?
  16. Leetcode466.统计重复个数——掐头去尾寻找循环点
  17. 【C语言】比较两个数组中是否有相同的元素
  18. C# Md5与AES加密解密源码记录
  19. php开发框架_适用于开发人员的10个PHP框架-最佳
  20. 多模态 |COGMEN: COntextualized GNN based Multimodal Emotion recognitioN论文详解

热门文章

  1. 浅谈智慧校园建设中存在的问题及解决方案
  2. python修改文件的某一行_简单文件操作python 修改文件指定行的方法
  3. 小米怎么快速回到顶部_打开小米这3个设置,手机越用越好用啦!你现在还不知道吗?...
  4. 数据分析之数据分类了解
  5. 回溯法中解空间树的组织
  6. 南阳oj入门题-谁是最好的coder
  7. 记录每天背的单词,准备考研。(2月21日)
  8. 最近抖音上虚拟元宇宙项目-猜歌名,代码解析
  9. pyinstaller打包程序带图片终极教程
  10. 最新爱网外链网盘V5.0版 全新界面 支持图片违规检测