博客
关于我
爬取某瓣电影中你好,李焕英电影的短评并生成词云
阅读量:491 次
发布时间:2019-03-07

本文共 2876 字,大约阅读时间需要 9 分钟。

要爬取的:

项目结构:

在这里插入图片描述
其中img.png是背景图片,lhz.py是Python代码,lhz.text是爬取到的短评,msyh.ttc是字体文件,new_inclound.png是生成的词云图片。
提取码:8888
下面是完整的代码:

import requests   # 请求库,需要安装from fake_useragent import UserAgent   # 构造user—Agent的库,需要安装from lxml import etree   # 使用xpath()需要导入该库,需要安装import time   # 使用time.sleep()使程序睡眠一段时间需要导入该库import jieba  # 中文分词库,需要安装import imageio   # 读取图片需要该库,需要安装import wordcloud   # 制作词云的库,需要安装from typing import NoReturn   # 类型标记的库,需要安装class lhz():    def __init__(self):        """初始化"""        self.next_page_url = "https://movie.douban.com/subject" \                             "/34841067/comments?start=0&limit=20&status=P&sort=new_score"        self.b = True    def get_all_comment(self, url: str) -> NoReturn:        """获取页面中的所有短评           url:要提取短评的链接        """        response = requests.get(url, headers={   'user-agent': UserAgent().chrome})        e = etree.HTML(response.text, etree.HTMLParser())        comm = e.xpath('//span[@class="short"]/text()')   # 使用xpath提取短评,结果是列表        with open('lhz.text', mode='a', encoding='utf-8') as f:            # 将列表中的每一个短评处理后写入文件中            for i in comm:                i.replace('\n', '')                i += '\n'                f.write(i)        if self.b:            # 使用xpath提取第一个页面中下一个页面的链接            next_url = e.xpath('//div[@id="paginator"]/a/@href')            self.b = False        else:            # 使用xpath提取非第一个页面中的下一个页面的链接            next_url = e.xpath('//div[@id="paginator"]/a[3]/@href')        if next_url:  # 如果提取到的下一个页面的链接不为空就递归提取            time.sleep(0.5)   # 程序睡眠0.5秒            # 构造下一个页面的链接            next_url = ''.join(next_url).replace('&percent_type=', '')            self.next_page_url = "https://movie.douban.com/subject" \                                 "/34841067/comments{}".format(next_url)            self.get_all_comment(self.next_page_url)  # 递归调用            time.sleep(1)    def make_clound(self) -> NoReturn:        """绘制词云图"""        with open('lhz.text', mode='r', encoding='utf-8') as f:  # 读取短评文件中的数据            txt = f.read()        txt_list = jieba.cut(txt)   # 分词        string = ' '.join(txt_list)   # 分词后再使用空格它们重新连接成字符串        img = imageio.imread('img.png')  # 读取图片        wc = wordcloud.WordCloud(  # 配置词云参数            width=1500,  # 词云图片的宽,单位是像素            height=1000,  # 词云图片的高            background_color='black',   # 背景颜色            font_path='msyh.ttc',   # 字体文件的路径            mask=img,  # 除白色部分之外的用来绘制词云            scale=10,  # 按照比例进行放大画布,如设置为1.5,则长和宽都是原来画布的1.5倍            stopwords={   ',', '.', ',', '。', '!', '?', '?'},  # 设置停用词        )        wc.generate(string)   # 生成词云        wc.to_file('new_inclound.png')   # 将词云保存到文件中if __name__ == '__main__':    """程序入口"""    lhz = lhz()    lhz.get_all_comment(lhz.next_page_url)    lhz.make_clound()

上面用到了许多第三方库,大家需要使用pip安装,同时也需要注意你的字体文件路径和背景图片路径可能和我的不一样,要改为自己的。

同时,由于豆瓣有反爬措施,爬取到200多条时就需要登录,所以短评只有200多条,但这足够了!

下面是我的运行结果:

在这里插入图片描述

转载地址:http://gtjcz.baihongyu.com/

你可能感兴趣的文章
MySQL中interactive_timeout和wait_timeout的区别
查看>>
mysql中int、bigint、smallint 和 tinyint的区别、char和varchar的区别详细介绍
查看>>
mysql中json_extract的使用方法
查看>>
mysql中json_extract的使用方法
查看>>
mysql中kill掉所有锁表的进程
查看>>
mysql中like % %模糊查询
查看>>
MySql中mvcc学习记录
查看>>
mysql中null和空字符串的区别与问题!
查看>>
MySQL中ON DUPLICATE KEY UPDATE的介绍与使用、批量更新、存在即更新不存在则插入
查看>>
MYSQL中TINYINT的取值范围
查看>>
MySQL中UPDATE语句的神奇技巧,让你操作数据库如虎添翼!
查看>>
Mysql中varchar类型数字排序不对踩坑记录
查看>>
MySQL中一条SQL语句到底是如何执行的呢?
查看>>
MySQL中你必须知道的10件事,1.5万字!
查看>>
MySQL中使用IN()查询到底走不走索引?
查看>>
Mysql中使用存储过程插入decimal和时间数据递增的模拟数据
查看>>
MySql中关于geometry类型的数据_空的时候如何插入处理_需用null_空字符串插入会报错_Cannot get geometry object from dat---MySql工作笔记003
查看>>
mysql中出现Incorrect DECIMAL value: '0' for column '' at row -1错误解决方案
查看>>
mysql中出现Unit mysql.service could not be found 的解决方法
查看>>
mysql中出现update-alternatives: 错误: 候选项路径 /etc/mysql/mysql.cnf 不存在 dpkg: 处理软件包 mysql-server-8.0的解决方法(全)
查看>>