原是口碑佳作的《我本是高山》为何扑街成这样?用Python来分析一波豆瓣短评 !

简介

最近《我本是高山》引发热烈讨论,热搜一波连着一波,究竟是为何扑街成这样呢?今天来教大家如何用Python来分析电影数据,获取豆瓣电影短评以及词云。
在这里插入图片描述

这里以《海上钢琴师》为例,给大家做个示范

【最新Python全套从入门到精通学习资源,文末免费领取!】

一、requests+lxml非登录爬取豆瓣数据

1、首先打开豆瓣,找到想要爬取的电影短评地址url,例如:
图片.png
2、打开网页中开发者工具,大部分电脑直接按F12即可,也有不同的,比如ThinkPad使用Fn+F12打开,在页面中找到网络->点击第一行->在右边找到消息头->下滑,找到请求头,记下user-agent

⭐**注意:**这里的user-agent包含浏览器相关信息和硬件设备信息等,可以伪装成合法的用户请求,否则报错403:服务器上文件或目录拒绝访问
图片.png
3、代码部分

#引包
import requests as rq
from lxml import etree

#url+headers信息
url = 'https://movie.douban.com/subject/1292001/'
headers = {'User-Agent':'****'}

4、获取网页数据(网页html式样)
⭐非登录状态下使用的是get()方法

data = rq.get(url,headers=headers).text

data的输出结果:
图片.png
5、获取到网页数据后要对网页进行解析

s = etree.HTML(data)

6、接下来获取网页中元素信息,比如:电影名称,导演,演员,时长等…可手动获取网页信息,如下图:
图片.png
选中目标标签右键->复制->XPath(盗用网络图片)
https://upload-images.jianshu.io/upload_images/12684358-ae93dca14ed1fe85.jpg
7、代码部分

#默认返回的是list列表格式
film = s.xpath('/html/body/div[3]/div[1]/h1/span[1]/text()')
director = s.xpath('/html/body/div[3]/div[1]/div[3]/div[1]/div[1]/div[1]/div[1]/div[2]/span[1]/span[2]/a/text()')
Starring = s.xpath('/html/body/div[3]/div[1]/div[3]/div[1]/div[1]/div[1]/div[1]/div[2]/span[3]/span[2]/a/text()')
duration = s.xpath('/html/body/div[3]/div[1]/div[3]/div[1]/div[1]/div[1]/div[1]/div[2]/span[13]/text()')
print("影名:" , film[0])
print("director:",director[0])
print("Starring:",Starring[0])
print("duration:",duration[0])

二、模拟登录豆瓣爬取短影评

1、模拟登录豆瓣

(1)登录豆瓣的方式有很多种,这里选择密码登录
图片.png
首先要获取到密码登录的url是什么,这里的url不是浏览器中的网址地址,而是在网络传输中的post请求,先输入错误的账号和密码,以获取url
图片.png
点击post,这里才是真正的请求网址
图片.png
接下来准备头信息,在消息头处下滑,找到cookie和user-agent:
图片.png
然后开始传输用户名和密码,查看传输表单数据
图片.png

代码部分:

s = rq.session()
def login_douban():
 # 登录URL
    login_url = 'https://accounts.douban.com/j/mobile/login/basic'
    # 请求头信息
    headers = {'User-Agent':'****',
               'Cookie':'****'}
    # 传递用户名和密码
    data = {
        'ck': '',
        'name':'用户名',
        'password':'密码',
        'remember':'false',
        'ticket': ''}
    try:
        r = s.post(url=login_url, headers=headers, data=data)
        r.raise_for_status()
    except:
        print("登录请求失败")
        return 0
    # 打印请求结果
    print(r.text)
    return 1
2、登录后爬取某一页数据

1、爬取之前先要获取当前页网址,例如获取第一页短评的网址
,点开短评,然后根据下图找到网址,同样的方式,找到user-agent
图片.png
代码如下:

comment_url = '****'
    #请求头
    headers ={'user-agent':'Mozilla/5.0'}
    try:
        r = s.get(comment_url,headers=headers)
        r.raise_for_status()
    except:
        print('爬取请求失败')
        return 0

2、爬取请求发送成功后,使用正则表达式提取影评内容
⭐标记:re库主要用于字符串匹配

comments = re.findall('<span class="short">(.*)</span>',r.text)
    if not comments:
        return 0

3、得到数据后,将其写入文本中(可一行一行写入,也可以全部写入)

    with open(COMMENTS_FILE_PATH, 'a+',encoding=r.encoding) as file:
        file.writelines('\n'.join(comments))

4、做到这里只可以获取一页上的数据,为了获取更多的数据就要加上翻页功能,在网址
https://movie.douban.com/subj…
中start即开始值,limit是每页显示的数据数量,点开下一页,会发现,start从0开始每次+20,依次向后循环翻页,因此代码中只要修改start值即可实现批量爬取数据,不过豆瓣限制每个账号最多获取500条
图片.png
`
5、最终获取的数据:
图片.png
6、将所有数据进行分词后,马上就可以制作词云了~~~
⭐注意:在open中要加入encoding=‘UTF-8’,说明传输文件的编码格式,否则会出现UnicodeDecodeError错误

def cut_word():
    with open(COMMENTS_FILE_PATH,encoding='UTF-8') as file:
        comment_text = file.read()
        wordlist = jieba.cut(comment_text,cut_all=True)
        wl = " ".join(wordlist)
        print(wl)
        return wl

7、最后一步~生成词云
⭐注意:分词和制作词云均需要新的库,有jieba,PIL等,注意引入相应的库

def create_word_cloud():
    #设置词云形状图片
    wc_mask = np.array(Image.open(WC_MASK_IMG))
    #数据清洗词列表
    stop_words = ['就是', '不是', '但是', '还是', '只是', '这样', '这个', '一个', '什么', '电影', '没有','呵呵']
    #设置词云的配置,如:字体,背景色,词云形状,大小
    wc = WordCloud(background_color='red',max_words=255,mask=wc_mask,scale=4,
                   max_font_size=255,random_state=42,stopwords=stop_words,font_path=WC_FONT_PATH)
    #生成词云
    wc.generate(cut_word())
    plt.imshow(wc,interpolation="bilinear")
    plt.axis("off")
    plt.figure()
    plt.show()

8、词云如下(我选用了一张大红底色,好丑…大家可以选浅色的,更直观)
图片.png

以上就是今天的全部内容分享,觉得有用的话欢迎点赞收藏哦!

Python经验分享

学好 Python 不论是用于就业还是做副业赚钱都不错,而且学好Python还能契合未来发展趋势——人工智能、机器学习、深度学习等。
小编是一名Python开发工程师,自己整理了一套最新的Python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。如果你也喜欢编程,想通过学习Python转行、做副业或者提升工作效率,这份【最新全套Python学习资料】 一定对你有用!

小编为对Python感兴趣的小伙伴准备了以下籽料 !

对于0基础小白入门:

如果你是零基础小白,想快速入门Python是可以考虑培训的!

  • 学习时间相对较短,学习内容更全面更集中
  • 可以找到适合自己的学习方案

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习、Python量化交易等学习教程。带你从零基础系统性的学好Python!

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。


最新全套【Python入门到进阶资料 & 实战源码 &安装工具】(安全链接,放心点击)

我已经上传至CSDN官方,如果需要可以扫描下方官方二维码免费获取【保证100%免费】

*今天的分享就到这里,喜欢且对你有所帮助的话,记得点赞关注哦~下回见 !

  • 24
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值