必威体育Betway必威体育官网
当前位置:首页 > IT技术

从爬取豆瓣影评到基于朴素贝叶斯的电影评论情感分析(上)

时间:2019-10-11 04:13:15来源:IT技术作者:seo实验室小编阅读:65次「手机版」
 

豆瓣影评

一、爬取豆瓣影评

基本思路:先获取每个电影的评论区链接,然后依次进入其评论区爬取评论。选取10部电影,每部200条评论。

用到的包为:BeautifulSoup,urllib

这里选取的链接为:豆瓣电影,打开后内容如下:

                         

直接审查元素,找到每部电影的标签位置,如下图:

                                       

因此,找到此标签的代码为:

lists = bsobj.find('ul', {'class': 'lists'}).findAll('li', {'class': 'list-item'})

其中bsobj是该网页的bs对象。

接下来我们需要找到这部电影短评的链接,如下:

https://movie.douban.com/subject/26985127/comments?status=P

这是短评首页,翻页观察其变化:

https://movie.douban.com/subject/26985127/comments?start=20&limit=20&sort=new_score&status=P(第2页)

https://movie.douban.com/subject/26985127/comments?start=40&limit=20&sort=new_score&status=P(第3页)

唯一变化的是start后的数字,一页有20条评论,subject后的数字是电影的id号,只要获取电影的id号,就可构造它的短评网页的url。

评论区的位置:

                                           

获取评论区标签的代码为:

comments=reviewBSobj.findAll('p',{'class':'comment-item'})

由于之后要对评论进行朴素贝叶斯,所以要给评论打上标签 。这里方便起见,对评分三星以上的为积极,标记为0,二星以下为消极,标记为1。

评分位置如图:

                                             

allstar后的数字30表示三星,爬取代码如下:

star=comment.find('span',{'class':re.compile(r'^allstar(.*?)')})

这里用到了正则表达式。 另外,有的评论没有星级评分,打不了标签,因而直接丢弃。

if star is None:continue
if int(star['class'][0][7])>2:target=0
else:target=1

target是标签,取值0或1。

在保存之前,先对数据进行简单的清洗:去掉标点符号以及特殊符号,只保留汉字。

content=comment.p.get_text().strip()
pattern = re.compile(r'[\u4e00-\u9fa5]+')
filterdata = re.findall(pattern, content)
cleaned_comments = ''.join(filterdata)

content是评论的内容,pattern是正则表达式,cleaned_comments是清洗完的数据。 

f = open('review.txt', 'w', encoding='utf-8')

数据保存在review.txt文件中。 

1、代码解析

getbs4函数:返回bs对象

def getbs4(url):
    '''

    :param url:网址
    :return: 返回BeautifulSoup对象
    '''
    try:
        html=urlopen(url)
        bsobj=BeautifulSoup(html,'html.parser')
        html.close()
    except (HTTPERROR,URLError):
        return None
    return bsobj

getFilmList函数:返回电影id列表 

def getFilmList(url):
    '''

    :param url:网址
    :return: 返回电影id的列表
    '''
    bsobj = getbs4(url)
    if bsobj == None: return
    lists = bsobj.find('ul', {'class': 'lists'}).findAll('li', {'class': 'list-item'})
    return lists

getReview函数:爬取影评的主函数

def getReview(url,n):
    '''
    :param n:需要爬取的爬取页数
    :return:爬取影评
    '''
    lists = getFilmList(url)
    print('电影总数:'+str(len(lists)))
    f = open('review.txt', 'w', encoding='utf-8')
    for i in range(1):
        print('开始爬取第%d电影,电影名为%s'%(i+1,lists[i]['data-title']))
        reviewUrl='https://movie.douban.com/subject/'+lists[i]['id']+'/comments?status=P'
        text=[]
        for j in range(n):
            reviewBSobj = getbs4(reviewUrl)
            if reviewBSobj == None: return
            comments=reviewBSobj.findAll('p',{'class':'comment-item'})
            print('-----第%d页-----' % (j+1))
            for comment in comments:
                star=comment.find('span',{'class':re.compile(r'^allstar(.*?)')})
                if star is None:continue
                print(star)
                if int(star['class'][0][7])>2:target=0
                else:target=1
                content=comment.p.get_text().strip()
                pattern = re.compile(r'[\u4e00-\u9fa5]+')
                filterdata = re.findall(pattern, content)
                cleaned_comments = ''.join(filterdata)
                text.APPend(str(target)+' '+cleaned_comments+'\n')

            print('-------------')
            reviewUrl='https://movie.douban.com/subject/'+lists[i]['id']+'/comments?start='+str(20*j+20)+'&limit=20&sort=new_score&status=P'
        f.writelines(text)

    f.close()

相关阅读

春节情感营销泛滥,品牌如何另辟蹊径

一年用一次的“春节+回家+催泪”的情感营销套路已经用烂了,用户越来越对此感到麻木无感,活动效果自然也不会好到哪里去。如何在这个

取代奶瓶Minidwep-gtk破解WPA 全攻略

原文地址为:取代奶瓶Minidwep-gtk破解WPA 全攻略 取代奶瓶Minidwep-gtk 破 WPA 全攻略 目录 1、 CDlinux 下使用 minidwepgtk 获

抓取中国地震台网最近一年地震数据,生成表格以及地震分

代码如下: import requests from lxml import etree import pymysql from pyecharts import Geo import numpy as np earthquake

JS获取事件冒泡路径(composedPath )的兼容性写法

调用方式:function clickDom(event) const path=eventPath(event); console.log(path); } 代码:/* * 获取事件冒泡路径,兼容ie11

货拉拉APP产品分析:作为同城货运的APP,是如何在市场上占

在同城货运市场不断扩大趋势下,货拉拉作为一款同城货运的APP,如何在市场上占有一席之地的,又存在哪些交互细节的问题,我们一起进入产

分享到:

栏目导航

推荐阅读

热门阅读