简单爬取《小丑》电影豆瓣短评生成词云

导语

 在前段时间看了杰昆菲尼克斯的小丑电影,心里很好奇大部分观众看完这部电影之后对此有什么评价,然后看了看豆瓣短评之后,觉得通过python把短评中出现最多的单词提取出来,做成一张词云,看看这部电影给观众们留下的关键词是什么。

抓取数据

 首先刚开始的时候 ,是通过requests去模拟抓取数据,发现短评翻页翻到20页之后就需要登录豆瓣用户才有权限查看,所以打算通过使用selenium模拟浏览器动作自动化将页面中的数据爬取下来,然后存储到特定的txt文件,由于没打算做其他的分析,就不打算存放到数据库中。

关于selenium和chromedriver安装

 关于流行的自动化测试框架selenium的工作原理,以及selenium和chromdriver对应的版本安装就不详细赘述,有兴趣的同学可以参考:
https://blog.csdn.net/weixin_43241295/article/details/83784692

分析豆瓣登录页面用户登录流程


 从页面上看来,大概流程就是点击导航栏中的密码登录,然后输入用户名密码,点击登录按钮,至于看网上一些豆瓣爬虫时会出现的验证图片,我没有遇到过,我直接登录就OK了,所以接下来就需要通过selenium模拟整个登录过程。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time

def crawldouban():
    name = "你的用户名"
    passw = "你的密码"

    # 启动chrome
    options = Options()
    options.add_argument(‘--headless‘)
    options.add_argument(‘--no-sandbox‘)
    browser = webdriver.Chrome(executable_path="/usr/bin/chromedriver", options=options)

    # 获取登录网址
    browser.get("https://accounts.douban.com/passport/login")
    time.sleep(3)

    # 登录自动化操作流程
    browser.find_element_by_class_name("account-tab-account").click()
    form = browser.find_element_by_class_name("account-tabcon-start")
    username = form.find_element_by_id("username")
    password = form.find_element_by_id("password")
    username.send_keys(name)
    password.send_keys(passw)
    browser.find_element_by_class_name("account-form-field-submit").click()
    time.sleep(3)

获取用户评论

 接下来就是,获取页面中的评论,然后将评论存储到指定的文本文件中,(我就不模拟查询电影然后,跳转到短评的整个过程了),直接从拿到的短评页面地址出发,不断点击下一页然后不断重复提取评论,写入的操作

    browser.get("https://movie.douban.com/subject/27119724/comments?status=P")
    comments = browser.find_elements_by_class_name("short")
    WriteComment(comments)

    while True:
        link = browser.find_element_by_class_name("next")
        path = link.get_attribute(‘href‘)
        if not path:
            break
        # print(path)
        link.click()
        time.sleep(3)
        comments = browser.find_elements_by_class_name("short")
        WriteComment(comments)
    browser.quit()        

# 将评论写入到指定的文本文件
def WriteComment(comments):
        with open("comments.txt", "a+") as f:
                for comment in comments:
                        f.write(comment.text+" \n")  

 代码解析:抓取的代码没啥好讲的,就是找到classname是‘short‘的元素,获取里面的文本内容写到指定文本文件即可,里面主要有个循环判断是否还有下一页,通过获取下一页的超链接,当获取不到时证明已经在最后一页了。

数据分词,生成词云图

 大概讲讲思路吧,我这里的数据处理比较粗糙,没有结合pandas+numpy,我将爬取下来的数据,简单的将换行符切割然后组成新的数据,然后通过jieba分词,将新的数据进行分词,最后再读取本地的一个停顿词文件获取一个停顿词列表。生成词云指定停顿词,以及字体文件,背景颜色等,再把词云图片保存到本地。

from wordcloud import WordCloud
from scipy.misc import imread
import jieba

# 处理从文本中读取的内容
def text_read(file_path):
    filename = open(file_path, ‘r‘, encoding=‘utf-8‘)
    texts = filename.read()
    texts_split = texts.split("\n")
    filename.close()

    return texts_split

def data_handle(picture_name):
    # 读取从网站上爬取下来的数据
    comments = text_read("comments.txt")
    comments = "".join(comments)

    # 分词, 读取停顿词
    lcut = jieba.lcut(comments)
    cut_text = "/".join(lcut)
    stopwords = text_read("chineseStopWords.txt")

    # 生成词云图
    bmask = imread("backgrounds.jpg")
    wordcloud = WordCloud(font_path=‘/usr/share/fonts/chinese/simhei.ttf‘, mask=bmask, background_color=‘white‘, max_font_size=250, width=1300, height=800, stopwords=stopwords)
    wordcloud.generate(cut_text)
    wordcloud.to_file(picture_name)

if __name__ == "__main__":
    data_handle("joker6.jpg")

这是我自己扣的一张图片作为背景:

最终效果图:

总结

 写爬虫到数据分析,大概有思路以及整理需要用到的工具大概花了两个晚上。整体来说,还是一些比较浅显易懂的东西,对于有关爬虫大规模并发采集 以及数据分析等内容还在学习,记录下自己学习过程还是蛮有趣的。

原文地址:https://blog.51cto.com/mbb97/2444879

时间: 2024-11-04 17:47:56

简单爬取《小丑》电影豆瓣短评生成词云的相关文章

爬取微信公众号内容——绘制词云

写在前面的话 前段时间写了一篇通过搜狗引擎获取微信公众号的文章,最近又看了一个网易云歌词绘制词云的程序 然后我就想,能否把这两者结合起来呢 还好经历几多波折终于把这个东西给弄出来了. 其实中间的实现不是很难, 关键是环境搭建实在是太困难了 好了,先把代码以及效果图奉献上吧 代码 weixin_spider.py #!/usr/bin/python # coding: utf-8 #这三行代码是防止在python2上面编码错误的,在python3上面不要要这样设置 import sys reloa

利用Scrapy爬取1905电影网

本文将从以下几个方面讲解Scrapy爬虫的基本操作 Scrapy爬虫介绍 Scrapy安装 Scrapy实例--爬取1905电影网 相关资料 Scrapy 爬虫介绍 Scrapy是Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试. Scrapy吸引人的地方在于它是一个框架,任何人都可以根据需求方便的修改.它也提供了多种类型爬虫的基类,如BaseSpider.sitemap爬虫等,最

Python爬取QQ空间好友说说并生成词云(超详细)

前言 先看效果图:  思路 1.确认访问的URL 2.模拟登录你的QQ号 3.判断好友空间是否加了权限,切换到说说的frame,爬取当前页面数据,下拉滚动条,翻页继续获取 爬取的内容写入本地TXT文件中 4.爬取到最后一页,读取TXT文件从而生成词云 具体分析 1.确认访问的URL 这就很简单了,我们通过观察发现,QQ空间好友的URL: https://user.qzone.qq.com/{好友QQ号}/311 2.我们在请求的时候会遇到模拟登录,也就是要通过Selenium+浏览器登录你的QQ

Python使用asyncio+aiohttp异步爬取猫眼电影专业版

asyncio是从pytohn3.4开始添加到标准库中的一个强大的异步并发库,可以很好地解决python中高并发的问题,入门学习可以参考官方文档 并发访问能极大的提高爬虫的性能,但是requests访问网页是阻塞的,无法并发,所以我们需要一个更牛逼的库 aiohttp ,它的用法与requests相似,可以看成是异步版的requests,下面通过实战爬取猫眼电影专业版来熟悉它们的使用: 1. 分析 分析网页源代码发现猫眼专业版是一个动态网页,其中的数据都是后台传送的,打开F12调试工具,再刷新网

爬取猫眼电影

爬去猫眼电影正字热映电影榜单的前五页: #爬取猫眼电影正在热映前5面的所有电影 import requests from requests import RequestException import re def get_one_page(url): header ={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.8

python爬取猫眼电影top100排行榜

爬取猫眼电影TOP100(http://maoyan.com/board/4?offset=90)1). 爬取内容: 电影名称,主演, 上映时间,图片url地址保存到mariadb数据库中;2). 所有的图片保存到本地/mnt/maoyan/电影名.png 代码: import re import pymysql as mysql from urllib import request from urllib.request import urlopen u = 'root' p = 'root'

14-Requests+正则表达式爬取猫眼电影

'''Requests+正则表达式爬取猫眼电影TOP100''''''流程框架:抓去单页内容:利用requests请求目标站点,得到单个网页HTML代码,返回结果.正则表达式分析:根据HTML代码分析得到电影的名称.主演.上映时间.评分.图片链接等信息.保存至文件:通过文件的形式保存结果,每一部电影一个结果一行Json字符串.开启循环及多线程:对多页内容遍历,开启多线程提高抓取速度.'''import requestsimport refrom requests.exceptions impor

# [爬虫Demo] pyquery+csv爬取猫眼电影top100

目录 [爬虫Demo] pyquery+csv爬取猫眼电影top100 站点分析 代码君 [爬虫Demo] pyquery+csv爬取猫眼电影top100 站点分析 https://maoyan.com/board/4?offset=0 翻页操作只会改变offset偏移量,每部电影的信息都在dd标签内,使用pyquery库中的css选择器直接解析页面 代码君 css选择器直接选择和使用find()方法的区别:find()用于选择子节点,因此限定了选择的区域,速度可能要快些,直接传入''选择器可能

使用xpath爬取猫眼电影排行榜

最近在学习xpath,在网上找资料的时候,发现一个新手经常拿来练手的项目,爬取猫眼电影前一百名排行的信息,很多都是跟崔庆才的很雷同,基本照抄.这里就用xpath自己写了一个程序,同样也是爬取猫眼电影,获取的信息是一样的,这里提供一个另外的解法. 说实话,对于网页信息的匹配,还是推荐用xpath,虽然正则确实也能达到效果,但是语句过于繁琐,一不注意就匹配不出东西,特别对于新手,本身就不熟悉正则表达式,错了都找不出来,容易劝退.正则我一般用于在处理文件,简直神器. 下面贴代码. import req