博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python爬取豆瓣《复仇者联盟3》评论并生成乖萌的格鲁特
阅读量:5889 次
发布时间:2019-06-19

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

代码地址如下:

1. 需求说明

本项目基于Python爬虫,爬取豆瓣电影上关于复仇者联盟3的所有影评,并保存至本地文件。然后对影评进行分词分析,使用词云生成树人格鲁特的形象照片。

2. 代码实现

此部分主要解释Python爬虫部分及使用词云生成图像的代码

Python爬虫

首先获取需要爬取的网页地址,然后通过requests.get()方式去获取网页,代码如下:

# 获取网页def getHtml(url):    try:        r = requests.get(url, timeout=30)        r.raise_for_status()        return r.text    except:        return ''

获取到网页之后,对网页中的元素进行正则匹配,找到评论相关的元素,并获取。

# 获取某个网页中的影评def getComment(html):    soup = BeautifulSoup(html, 'html.parser')    comments_list = []    comment_nodes = soup.select('.comment > p')    for node in comment_nodes:        comments_list.append(node.get_text().strip().replace("\n", "") + u'\n')    return comments_list

将爬取到的影评保存至文本文件中,以备后续分析使用。

def saveCommentText(fpath):    pre_url = "https://movie.douban.com/subject/24773958/comments?"    depth = 8    with open(fpath, 'a', encoding='utf-8') as f:        for i in range(depth):            url = pre_url + 'start=' + str(20 * i) + '&limit=20&sort=new_score&' + 'status=P'            html = getHtml(url)            f.writelines(getComment(html))            time.sleep(1 + float(random.randint(1, 20)) / 20)
基于词云生成图像

注释比较详细,可以看注释说明

def drawWordcloud():    with codecs.open('text.txt', encoding='utf-8') as f:        comment_text = f.read()    # 设置背景图片,可替换为img目录下的任何一张图片    color_mask = imread("img\Groot4.jpeg")    # 停用词设置    Stopwords = [u'就是', u'电影', u'你们', u'这么', u'不过', u'但是',                 u'除了', u'时候', u'已经', u'可以', u'只是', u'还是', u'只有', u'不要', u'觉得', u','u'。']    # 设置词云属性    cloud = WordCloud(font_path="simhei.ttf",                      background_color='white',                      max_words=260,                      max_font_size=150,                      min_font_size=4,                      mask=color_mask,                      stopwords=Stopwords)    # 生成词云, 可以用generate输入全部文本,也可以我们计算好词频后使用generate_from_frequencies函数    word_cloud = cloud.generate(comment_text)    # 从背景图片生成颜色值(注意图片的大小)    image_colors = ImageColorGenerator(color_mask)    # 显示图片    plt.imshow(cloud)    plt.axis("off")    # 绘制词云    plt.figure()    plt.imshow(cloud.recolor(color_func=image_colors))    plt.axis("off")    plt.figure()    plt.imshow(color_mask, cmap=plt.cm.gray)    plt.axis("off")    plt.show()    # 保存图片    word_cloud.to_file("img\comment_cloud.jpg")
为了方便阅读,这里贴出整体过程编码:
def getHtml(url):    try:        r = requests.get(url, timeout=30)        r.raise_for_status()        return r.text    except:        return ''def getComment(html):    soup = BeautifulSoup(html, 'html.parser')    comments_list = []    comment_nodes = soup.select('.comment > p')    for node in comment_nodes:        comments_list.append(node.get_text().strip().replace("\n", "") + u'\n')    return comments_listdef saveCommentText(fpath):    pre_url = "https://movie.douban.com/subject/24773958/comments?"    depth = 8    with open(fpath, 'a', encoding='utf-8') as f:        for i in range(depth):            url = pre_url + 'start=' + str(20 * i) + '&limit=20&sort=new_score&' + 'status=P'            html = getHtml(url)            f.writelines(getComment(html))            time.sleep(1 + float(random.randint(1, 20)) / 20)def cutWords(fpath):    text = ''    with open(fpath, 'r', encoding='utf-8') as fin:        for line in fin.readlines():            line = line.strip('\n')            text += ' '.join(jieba.cut(line))            text += ' '    with codecs.open('text.txt', 'a', encoding='utf-8') as f:        f.write(text)def drawWordcloud():    with codecs.open('text.txt', encoding='utf-8') as f:        comment_text = f.read()    # 设置背景图片    color_mask = imread("img\Groot4.jpeg")    # 停用词设置    Stopwords = [u'就是', u'电影', u'你们', u'这么', u'不过', u'但是',                 u'除了', u'时候', u'已经', u'可以', u'只是', u'还是', u'只有', u'不要', u'觉得', u','u'。']    # 设置词云属性    cloud = WordCloud(font_path="simhei.ttf",                      background_color='white',                      max_words=260,                      max_font_size=150,                      min_font_size=4,                      mask=color_mask,                      stopwords=Stopwords)    # 生成词云, 可以用generate输入全部文本,也可以我们计算好词频后使用generate_from_frequencies函数    word_cloud = cloud.generate(comment_text)    # 从背景图片生成颜色值(注意图片的大小)    image_colors = ImageColorGenerator(color_mask)    # 显示图片    plt.imshow(cloud)    plt.axis("off")    # 绘制词云    plt.figure()    plt.imshow(cloud.recolor(color_func=image_colors))    plt.axis("off")    plt.figure()    plt.imshow(color_mask, cmap=plt.cm.gray)    plt.axis("off")    plt.show()    # 保存图片    word_cloud.to_file("img\comment_cloud.jpg")

三、项目结构

项目结构

ecX8WtDp4hbtxshyr5S.jpg

注意整个项目只有一个源码文件,其他的为图片文件

四、运行效果图

一大波格鲁特来袭

格鲁特1号

groot1.jpg

格鲁特2号

groot3.jpg

格鲁特3号

groot4.jpg

格鲁特4号

groot5.jpgPython爬取豆瓣《复仇者联盟3》评论并生成乖萌的格鲁特

代码地址如下:

注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权

你可能感兴趣的文章
UVa 10057 - A mid-summer night's dream
查看>>
解决3 字节的 UTF-8 序列的字节 3 无效
查看>>
浅谈浏览器兼容性问题-(1)产生、看待与思
查看>>
iOS8中定位服务的变化(CLLocationManager协议方法不响应,无法回掉GPS方法,不出现获取权限提示)...
查看>>
BeanUtils\DBUtils
查看>>
VC 创建托盘,托盘tooltip。右键托盘菜单,点击别的地方会隐藏掉的问题。
查看>>
第一天,新的定义
查看>>
WPF EventSetter Handler Command
查看>>
polya定理,环形涂色
查看>>
day4-装饰器前奏
查看>>
forward和redirect的区别
查看>>
使用JavaMail完成邮件的编写
查看>>
洛谷P1576 最小花费
查看>>
封装了一个类,可生成验证码,缩略图,及水印图
查看>>
第一阶段项目总结
查看>>
Java集合详解
查看>>
myeclilpse打开文件所在位置的图标消失后的找回方法
查看>>
Android利用文本分割拼接开发一个花藤文字生成
查看>>
哈夫曼树的实现
查看>>
12-18Windows窗体应用小程序之记事本(1)
查看>>