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

一、爬取豆瓣影评

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

    用到的包为:bs4,urllib

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

     

    选择两个电影,打开它们的短评页面,它们的链接如下:

    我不是药神:https://movie.douban.com/subject/26752088/comments?status=P  

    邪不压正:https://movie.douban.com/subject/26366496/comments?status=P

    观察可以发现,链接的不同之处仅在于两部电影的id号不同(一个是26752088,一个是26366496),因而我们只需要先获取每部电影的id号,就可以打开它们的短评内容进行爬取。然后将短评翻页,观察链接的变化:

第二页:https://movie.douban.com/subject/26752088/comments?start=20&limit=20&sort=new_score&status=P

第三页:https://movie.douban.com/subject/26752088/comments?start=40&limit=20&sort=new_score&status=P

    豆瓣的短评一页二十条,所以第二页的start从20开始,第三页从40开始,以此类推,所以我们可以通过改变start的参数控制要爬取的页数。

明白了这些,我们就可以开始动手爬取影评了。当然,为了防止被封IP,笔者每部电影只爬取20页影评,总共爬了10部电影,总共2000条左右的评论,经测试,大约爬取10000条评论的时候会被封IP。

1、获得每个电影的id

    首先审查元素,观察网页的结构可知,在一个属性class=‘lists’的ul块下有一系列电影信息,包括我们需要的id号:


        于是爬取函数定义如下:

def getFilmList(url):
    '''

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

2、获取每个电影的短评

因为之后要对获取的短评进行情感分析,所以这里根据每条评论的评分给评论打上标签,3星以上为积极,标为0,1~2星标为1。同时,需要对数据进行预处理,去除标点等无用字符,方便之后的挖掘。最后,将处理后带标签的评论保存在文件中。

猜你喜欢

转载自blog.csdn.net/qq_37768140/article/details/81049973