[爬虫项目]猫眼电影TOP100
文章目录
- 一、项目背景
- 二、项目代码
- 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相关推荐
- Python3 爬虫实战 — 猫眼电影TOP100【requests、lxml、Xpath、CSV 】
爬取时间:2019-09-23 爬取难度:★☆☆☆☆☆ 请求链接:https://maoyan.com/board/4 爬取目标:猫眼电影 TOP100 的电影名称.排名.主演.上映时间.评分.封面图 ...
- csv中包含多余换行符_Python3爬虫之猫眼电影TOP100(requests、lxml、Xpath、CSV)
点击关注,我们共同每天进步一点点! [1x00]循环爬取网页模块 观察猫眼电影TOP100榜,请求地址为:https://maoyan.com/board/4 每页展示10条电影信息,翻页观察 url ...
- 【python爬虫】猫眼电影TOP100电影封面下载
在上次爬取信息的基础上下载图片. 下载挺容易的 在封面命名上画了大笔时间..... import requests import bs4 from bs4 import BeautifulSoup i ...
- python爬电影_Python爬虫项目--爬取猫眼电影Top100榜
本次抓取猫眼电影Top100榜所用到的知识点: 1. python requests库 2. 正则表达式 3. csv模块 4. 多进程 正文 目标站点分析 通过对目标站点的分析, 来确定网页结构, ...
- 爬虫从头学之Requests+正则表达式爬取猫眼电影top100
爬取思路 当我们想要爬取一个页面的时候,我们要保证思路清晰,爬虫的思路分四个步骤,发起请求,获取响应内容,解析内容,存储内容.根据这四个内容我们的思路就很清晰.以下为具体步骤 使用requests库爬 ...
- 【Python爬虫】猫眼电影榜单Top100
这是一个入门级的Python爬虫,结构易于理解.本文对编写此爬虫的全过程进行了讲述.希望对大家的Python爬虫学习有所帮助. 一.目标 爬取猫眼电影榜单Top100,将数据存入Excel文件中,并利 ...
- 爬虫,爬取猫眼电影Top100的电影名与评分
** 爬虫,爬取猫眼电影Top100的电影名与评分 ** import requests import threading import reclass maoyan_top500(threading ...
- 网络爬虫-猫眼电影top100
接下来的一个月将更新多个网络爬虫的博文,同时也是分享自己在网络爬虫道路上的磕磕绊绊,学习和成长的历程. 今天的网络爬虫是爬取猫眼电影top100,实现分页爬取,然后保存在本地txt文本上. url : ...
- python爬虫入门练习:BeautifulSoup爬取猫眼电影TOP100排行榜,pandas保存本地excel文件
传送门:[python爬虫入门练习]正则表达式爬取猫眼电影TOP100排行榜,openpyxl保存本地excel文件 对于上文使用的正则表达式匹配网页内容,的确是有些许麻烦,替换出现任何的差错都会导致 ...
- python爬虫猫眼电影票房_python爬取猫眼电影top100排行榜
爬取猫眼电影TOP100(http://maoyan.com/board/4?offset=90) 1). 爬取内容: 电影名称,主演, 上映时间,图片url地址保存到mariadb数据库中; 2). ...
最新文章
- 2020年,图机器学习的趋势有哪些?
- 零基础学python视频百度云-零基础入门学习Python 小甲鱼视频教程
- python输入一个字母_python – Tkinter输入的第一个字母
- Java时区处理初学者指南
- offer该怎么选:大公司or小公司?高薪or期权?
- 在C 编程语言中 静态数组的替代模板,以编译方式在C ++中编译时创建静态数组...
- SQL锁机制和事务隔离级别
- 新手如何使用Docker来搭建PHP开发环境?
- 调用第三方接口发送短信
- php gmssl,gmssl
- 娱乐游戏及计算机动画论文,有关游戏美术设计论文
- rstudio中读取数据_Rstudio操作数据库
- 外国参考文献计算机类,计算机毕业设计外文参考文献.docx
- js获取服务器时间,并以北京时区显示
- AI配对真能解决“单身公害”?
- Leetcode466.统计重复个数——掐头去尾寻找循环点
- 【C语言】比较两个数组中是否有相同的元素
- C# Md5与AES加密解密源码记录
- php开发框架_适用于开发人员的10个PHP框架-最佳
- 多模态 |COGMEN: COntextualized GNN based Multimodal Emotion recognitioN论文详解