Python 历险记第四站——利用 Python 实现情感分析

2017/03/09 Python

继上篇讲述Python实现词云后,这篇文章将围绕Python实现情绪分析进行展开。实验过程会运用到爬虫和情绪分析的知识。话不多说,让我们开始这篇文章!

步骤一:选择数据源

由于之前在第二站的时候由于网站的特殊原因并没有实现scrapy,所以笔者今天打算顺便学习一下scrapy这个爬虫框架。我选择了我最喜欢的电影《发条橙》的豆瓣短评作为实验对象。

步骤二:爬取数据

不得不承认,我在这一个步骤花了太多的时间,遇到了很多问题,先把代码给出如下:

import scrapy

from scrapy.http import Request
from scrapy.selector import Selector
from emotional_analysis.items import DoubanItem

class DoubanSpider(scrapy.Spider):

    name = 'douban'
    allowed_domains = ['douban.com']
    start_urls = [
        'https://movie.douban.com/subject/1292233/comments'
    ]

    def parse(self, response):
        sel = Selector(response)
        item = DoubanItem()
        item['comment'] = sel.xpath('//div[@class = "comment"]/p[@class = ""]/text()[1]').extract()
        yield item

        next_page = '//a[@class="next"]/@href'
        if sel.xpath(next_page):
            url_nextpage = 'https://movie.douban.com/subject/1292233/comments' + sel.xpath(next_page).extract()[0]
            request = scrapy.Request(url_nextpage, callback = self.parse)
            yield request

scrapy是现在运用较为广泛的一个爬虫库,笔者使用的版本是1.3.0。这里提供两个相关的教程,第一个是Scrapy1.3教程,第二个是官方的中文文档),不过版本停留在1.0版本,但本人认为差别不大,所以推荐大家优先参考后者。

关于scrapy的安装,我不会进行讲解,需要的朋友自己寻找教程,这里直接记录一下我在整个实验过程中遇到的问题。

首先是robot.txt的问题,想要了解它更多可以参考什么样的爬虫才是好爬虫:Robots协议探究robots.txt 能够封禁网络爬虫吗。scrapy默认会使用robot.txt,所以默认情况下无法访问我们爬取的网站。我们需要进行简单的设置,具体参考这里

其次,豆瓣作为一个经常被爬的网站,它的反爬虫自然也做的很不错,这让我遇到了很多的困难。我尝试了多次改进:

  • 设置User-Agent:我用F12获取到了爬取网页的Header,并在scrapy的settings.py文件下进行设置,使得访问不会再返回403
  • 验证Xpath:成功访问网页后,却发现无法追踪链接,我把问题锁定到了xpath的正确性上,参考了资料解决了这个问题。值得一提的是,scrapy自带的选择器验证经常会因为403等问题而无法使用,所以推荐大家使用我推荐的资料,另外,即使xpath对上了,有时候还是可能出现xpath错误,所以必要的时候要对xpath进行适当删减进行实验。解决了追踪链接的问题,我却发现在爬取到第10页的时候还是出现了403
  • 禁用cookies、设置延迟下载:网上提到的解决爬取豆瓣中途失败的方法,具体可以在settings.py进行设置,但问题却依旧没有得到解决
  • 使用代理:没有尝试成功,感兴趣的朋友可以自行尝试
  • 设置Referer:经过一番资料搜索和独立思考,发现问题很大可能是出现在Referer这里,可是由于Referer的动态变化让我无从下手
  • 使用豆瓣API:豆瓣提供了API供用户获取数据,但由于只是小实验,所以本人不计划尝试,需要的朋友请自行查询资料

多次尝试无果后,我决定用前九页的数据先进行实验。我执行了命令scrapy crawl douban -o items.json爬取到数据并保存到文件中。在本人的机器上,保存的编码是Unicode,所以我使用了工具将其转换成了中文。

关于爬取数据的讲述就先到这里了,接下来我们看看怎么情绪分析我们获取到的数据!

步骤三:情绪分析

目前常见的情绪分析方法主要是两种:基于情感词典的方法和基于机器学习的方法,我们这里采用的是后者。

首先我们要下载豆瓣网影评情感测试语料,然后我们要用我们之前实验用到的工具jieba对数据进行分词处理,最后则是要进行模型的构建,这样子我们就可以得到我们想要的情绪分析结果了!

Search

    Table of Contents