《霸王别姬》短评

目标URL: https://movie.douban.com/subject/1291546/comments?status=P

首先安装两个模块:

pip install jieba -i https://pypi.douban.com/simple
pip install wordcloud -i https://pypi.douban.com/simple

爬取数据

Excel表格要获取的内容:用户名、点赞数、星级、时间、短评内容

1)获取第一页数据

(用户名、点赞数、星级、时间、短评内容)

Code:

运行结果:

2)使用xlwt、openpyxl模块写入excel文件

Code:

运行结果:

3)尝试获取多页的数据

  • 添加cookie

  • 尝试获取多页的数据,并添加异常捕获机制。

    • 针对响应:排除某一页爬取时被截获
    • 有下一页时的Element:

    • 无下一页时的Elements:

    判断有无下一页:

    def parse_data(resp):'''解析响应'''...res = html.xpath('//*[contains(@id, "paginator")]/a[contains(@class, "next")]')if not res:print('下一页已经没有内容了...')return Noneelse:# 返回数据return True
    

    补充:星级也要做对应的处理,不然会混入奇怪的字符:m

    if star.isalpha():  # 有些用户没有给星级star = '0'
    

完整代码:

import requests
from lxml import etree
import openpyxl
import timeurl = 'https://movie.douban.com/subject/1291546/comments?'headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ''Chrome/90.0.4430.212 Safari/537.36 ','Cookie': '_vwo_uuid_v2=D21A90EEC60A84B63D467FE996BB1DF1D|12adfdc440b6565a76940f86fc6a8472; douban-fav-remind=1; ''ll="118283"; bid=1MCaZCO3JIA; __yadk_uid=TkyAIhUGdwemFLKFoOVBKys5VHsdSjsr; ''__gads=ID=4018de559e3adebb-22be7e1fccc60064:T=1616471893:RT=1616471893:S=ALNI_Maoo2''-1ph1qkwk3DfdPpnN1xqoiQA; ''_vwo_uuid_v2=D21A90EEC60A84B63D467FE996BB1DF1D|12adfdc440b6565a76940f86fc6a8472; __utmc=30149280; ''__utmc=223695111; _pk_ref.100001.4cf6=%5B%22%22%2C%22%22%2C1621742461%2C%22https%3A%2F%2Fcn.bing.com''%2F%22%5D; _pk_ses.100001.4cf6=*; dbcl2="218934882:7Y/YTUP8/mk"; ck=yFqV; ''__utma=30149280.848034361.1580634472.1621734964.1621742494.28; __utmb=30149280.0.10.1621742494; ''__utmz=30149280.1621742494.28.22.utmcsr=accounts.douban.com|utmccn=(''referral)|utmcmd=referral|utmcct=/; __utma=223695111.597269736.1580634472.1621734964.1621742494.27; ''__utmb=223695111.0.10.1621742494; ''__utmz=223695111.1621742494.27.21.utmcsr=accounts.douban.com|utmccn=(''referral)|utmcmd=referral|utmcct=/; ap_v=0,6.0; push_noty_num=0; push_doumail_num=0; ''_pk_id.100001.4cf6=f26d4ea394ffc4b1.1580634472.27.1621742501.1621737065.','Host': 'movie.douban.com','Referer': 'https://movie.douban.com/subject/1291546/','sec-ch-ua': '" Not A;Brand";v="99", "Chromium";v="90", "Google Chrome";v="90"','sec-ch-ua-mobile': '?0','Sec-Fetch-Dest': 'document','Sec-Fetch-Mode': 'navigate','Sec-Fetch-Site': 'same-origin','Sec-Fetch-User': '?1','Upgrade-Insecure-Requests': '1','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,''application/signed-exchange;v=b3;q=0.9','Accept-Encoding': 'gzip, deflate, br','Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8','Cache-Control': 'max-age=0','Connection': 'keep-alive'
}# 定义请求参数
params = {# start=20&limit=20&status=P&sort=new_score'start': 0,'limit': '20','status': 'P','sort': 'new_score'
}def parse_data(resp):# 解析htmlhtml = etree.HTML(resp.text)# 获取电影短评标签列表movie = html.xpath('//*[@id="comments"]/div[contains(@class,"comment-item")]')# print(len(movie), movie)for item in movie:short = item.xpath('.//span[contains(@class, "short")]/text()')[0]username = item.xpath('./div[2]/h3/span[2]/a/text()')[0]comment_time = item.xpath('.//span[contains(@class, "comment-time")]/@title')[0]votes = item.xpath('./div[2]/h3/span[1]/span/text()')[0]star = item.xpath('.//span[contains(@class, "comment-info")]/span[2]/@class')[0].split(' ')[0][-2]print(f'用户名:{username} | 点赞数:{votes} | 星级:{star} | 时间:{comment_time} | 短评:{short}')save_data([username, votes, star, comment_time, short])returndef save_data(data_list):# 保存数据sheet.append(data_list)def get_resp(count):# 获取响应# 判断是否爬取成功resp = Nonesuccess_code = True# 重连次数num = 0while success_code:if num > 8:  # 重连8次,如果不成功,就不爬了return Nonetry:# 获取页码params['start'] = str(count * 20)resp = requests.get(url, headers=headers, params=params)success_code = Falseexcept Exception as e:wb.save('bawang.xlsx')print('错误类型', e)print('响应获取失败,已经被识别为爬虫,待会再来爬...')success_code = True# 等待一些时间time.sleep(60)num += 1print('继续爬取~')continuereturn respdef bawang_spider():# 记录页码count = 0# 记录爬取的数目row_num = 0while True:# 获取响应response = get_resp(count)if not response:print('重连超过8次,停止爬取...')break# 解析响应data = parse_data(response)row_num += 20print(f'已爬取完{count + 1}条数据, 存入{row_num}条数据')count += 1time.sleep(3)wb.save('bawang.xlsx')if __name__ == '__main__':# 创建工作簿wb = openpyxl.Workbook()sheet = wb.active  # 创建sheet# 创建列sheet.title = '豆瓣短评'sheet['A1'] = '用户名'sheet['B1'] = '点赞数'sheet['C1'] = '星级'sheet['D1'] = '评论时间'sheet['E1'] = '短评'bawang_spider()

运行结果:

数据预处理

Code:

运行结果:

数据分析

1)各类评论占比

好评:4~5星

一般:3星

差评:0~2星

补充:如果星级中含有str:

s_star = df['星级']
s_star.apply(int)
  • 统计每个星级出现的频次
pd.value_counts(s_star)

Code:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd# 修改字体
from pylab import *mpl.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False# 读取影评数据
df = pd.read_excel('bawang.xlsx')
df_cp = df.copy()# 去除重复行
df_cp.drop_duplicates()# 获取星级的Series
s_star = df['星级']
s_star.apply(int)# 统计每个星级出现的频数
count = s_star.count()
star_dict = pd.value_counts(s_star).to_dict()
print(star_dict)
star_num = {'好评': star_dict[4] + star_dict[5], '一般': star_dict[3], '差评': star_dict[0] + star_dict[1] + star_dict[2]}
print(star_num)# 构造Series
star_s = pd.Series(star_num)
ax = star_s.plot(kind='pie',  # 选择饼状图autopct='%.1f%%',  # 设置显示效果radius=1,  # 设置圆的半径title='各类评论占比',textprops={'fontsize': 15, 'color': 'black'},  # 设置显示的文本counterclock=False  # 顺时针)plt.show()
# 保存png
fig = ax.get_figure()
fig.savefig('fenlei.png')

运行结果:

Python爬虫实训 数据挖掘 数据分析(豆瓣《霸王别姬》短评)相关推荐

  1. python爬虫实训日志_Python学习学习日志——爬虫《第一篇》(BeautifulSoup)

    爬虫简介(学习日志第一篇) 一.爬虫介绍 爬虫:一段自动抓取互联网信息的程序,从互联网上抓取对于我们有价值的信息. 二.Pyyhon爬虫架构 Python 爬虫架构主要由五个部分组成,分别是调度器.U ...

  2. python爬虫实战-python爬虫实战一:分析豆瓣中最新电影的影评

    简介 刚接触python不久,做一个小项目来练练手.前几天看了<战狼2>,发现它在最新上映的电影里面是排行第一的,如下图所示.准备把豆瓣上对它的影评(短评)做一个分析. 目标总览 主要做了 ...

  3. python爬虫实训心得_Python爬虫小结

    原博文 2019-07-09 09:46 − 有些数据是没有专门的数据集的,为了找到神经网络训练的数据,自然而然的想到了用爬虫的方法开始采集数据.一开始采用了网上的一个动态爬虫的代码,发现爬取的图片大 ...

  4. python爬虫实训第六天

    京东评论分析完成阶段 (1)京东评论爬取数据库版 import json import requests import timeimport sqlite3def get_one(pid,pageno ...

  5. python爬虫实训实验报告_用Pycharm进行scrapy爬虫的实验报告

    1. 实验内容 使用Pycharm写代码,采用scrapy爬取红袖小说网前十页的作品信息. 2. 试验环境 操作系统:window10 家庭版64位操作系统 Python版本:python 3.7.3 ...

  6. python爬虫实训心得_python爬虫的一些心得

    爬虫用于从网上得到目标数据,根据需要对其予以利用,加以分析,得到想要的实验成果.现在讲一讲我这两天学到的东西. 第一,爬虫的算法结构,包括以下几个方面: (1)读取网络数据 (2)将获取的数据解析为目 ...

  7. python爬虫实训心得_python实训心得体会

    技术文档 主体内容:可以认为是页面最想表达的内容总和.对于内容详情页来说,主体内容指从标题开始至正文内容结束,翻页区域也被视为主体内容,文章后的评论.分享.推荐等不视为主体内容. 首屏:用户点击搜索结 ...

  8. python爬虫豆瓣电影短评_【Python爬虫】BeautifulSoup爬取豆瓣电影短评

    目的:爬取豆瓣[红海行动]电影的首页短评 步骤: 1.使用BeautifulSoup解析网页 soup = BeautifulSoup(r, 'lxml') // lxml 库解析速度快,也能解析复杂 ...

  9. python开发实训平台_一体化教学实训平台解决方案

    泰迪科技根据高校实践教学中的痛点,首次提出"鱼骨教学法"的概念.以企业真实需求为导向,学生学习技能紧紧围绕企业实际应用需求,将学生掌握的理论知识,通过企业案例的形式进行衔接,达到知 ...

最新文章

  1. 齐二TK6916/20/26/32系列数控落地铣镗床简介8
  2. 「知识表示学习」专题论文推荐 | 每周论文清单
  3. oc引导windows蓝屏_跟电脑蓝屏say no!【亲测有效】
  4. Python学习笔记——如何获得数值类型的最大值和最小值(表示范围)
  5. linux 系统修复 启动盘,linux服务器系统盘坏且系统盘为软raid的修复方法
  6. 反向代理实现同域名下PHP和Java共存
  7. 为-微软-重写-TechNet Library-中-Microsoft Lync Server 2010
  8. 阿里云短信验证码平台使用demo
  9. 教你如何正确的去校验身份证
  10. android 美团下拉菜单,Android仿美团分类下拉菜单实例代码
  11. html七天签到页面,每日前端签到(第七天)
  12. 牛客网SQL刷题问题汇总
  13. python余弦相似度_推荐系统01--余弦相似度
  14. 【回眸】Study with me!计算机二/三 级(物联网)刷题的心路历程
  15. CMake - 生成器(Generators)
  16. 新形势下国家医疗保障局信息化建设注意点(三)建设省级平台
  17. php结账系统,pay: ThinkPHP开源聚合支付系统
  18. 刚进入软件测试的行业,就我学习到的关于软件测试的基础知识做以下总结。...
  19. oracle 弱口令扫描器,超级弱口令检查工具,检查SSH/FTP/MySQL/Oracle/SQLServer弱口令
  20. ADS2011_10版本破解方法

热门文章

  1. ASCII编码和Unicode编码的区别
  2. Guriddo jqGrid的学习-入门
  3. 【弹跳闯关小游戏,c++】
  4. 判断一个字符串是否经过base64加密过
  5. 用计算机探索规律的思维导,用计算器探索规律教学设计
  6. PTA 练习3-4统计字符
  7. 姓雷取名:雷姓好听到爆的女孩名字
  8. iPhone图形开发绘图小结
  9. 以太Ethernaut靶场打靶—6 Delegation
  10. 计算机未来的发展趋势三网合一,三网合一未来网络发展的新趋势