【附代码】python爬取新浪微博(微博内容,微博评论,用户信息等)并进

系统 6831 0

新浪微博数据抓取及情绪分析

  • 微博数据爬虫
    • 开始爬虫之前请先了解
    • 代码实现
      • (一)利用高级搜索抓取指定微博
      • (二)抓取任意微博数据
  • 文本情绪分析
    • 工具及原理
    • 数据预处理和模型训练


本文包含内容:借助Python抓取微博数据,可以实现对 微博用户信息 微博内容,微博点赞数评论数转发数,评论内容 等信息的抓取,并对抓取的数据进行情绪分析

代码实现:微博用户的行为与情感分析

爬虫过程中如有问题请 留言 ,或者在github的代码中开 issue ,我们会及时解答。


微博数据爬虫

开始爬虫之前请先了解

  • Q:有哪些微博提供的数据是我们可以利用的?
    A:微博数据可以分为几类: 博文 相关数据, 用户信息 数据,单条微博 评论 数据, 社交关系 网络数据。
    博文相关数据 包括:微博的URL,微博作者的ID,微博的内容,发布的工具,微博发表时间,微博附带图的URL,转发数,评论数,点赞数,是否是转发的微博,源微博的URL
    用户信息 数据包括:用户ID,昵称,所在省,所在市,个人简介,生日,性别,会员等级,认证情况,微博发表数,粉丝数,关注数
    评论数据 包括:评论的URL,评论的用户ID,weibo的URL,评论内容,评论创建时间
    社交关系 网络数据包括:关注者的用户ID,被关注者的用户ID
  • Q:抓取哪个微博平台的数据?
    A:微博包含有手机端,网页端,即 weibo.cn weibo.com ,对于爬取微博的数据这一任务而言,选择 weibo.cn 是最好的,其网页结构更为简单,解析网页更为方便,并且几乎包含了所有我们需要的数据,因此能用weibo.cn就不用其他的网站进行爬虫。 【附代码】python爬取新浪微博(微博内容,微博评论,用户信息等)并进行情绪分析_第1张图片
  • Q:微博爬虫存在哪些难点?
    A:微博登录是微博爬虫的一个基础,在爬虫之前需要先实现微博的 自动登录 ,weibo.cn 和 weibo.com 两者的自动登录方式是不一样的,前者更为简单,本文讲解的是前者的数据爬虫,其自动登录方式为通过自动化工具 selenium 获取 cookie ,之后携带cookie发出请求。
    另外,微博可能存在 封帐号 的问题,因此可以买好小号用 小号抓取数据 。微博小号购买地址
  • Q:使用的是什么工具?
    A:本文介绍的是使用 scrapy 框架构建爬虫。给定初始的url,爬虫工具就会将该页面下载下来,并解析该页面的信息,得到该页面的微博数据,同时产生下一页的地址,并接着去抓取下一页
  • Q:如果需要抓取大量的微博数据,有什么注意事项?
    A:与其他网站不同,微博不会封IP,因此不用构建IP池,但是微博会存在封帐号的问题,因此需要构建一个 账号池 ,并针对账号池中的所有账号获取cookie并存储。账号购买地址上面已经提供了,本文在抓取数据时最多购买了40个账号,进行多线程的大量微博数据抓取。

代码实现

代码实现地址:https://github.com/CUHKSZ-TQL/WeiboSpider_SentimentAnalysis

(一)利用高级搜索抓取指定微博

首先介绍附带微博高级搜索功能的爬虫步骤。请参考链接中的 WeiboSpider 文件夹中的内容。

高级搜索意味着在抓取微博时,可以对目标微博的 发布时间,发布地点,包含的关键词,是否为热门微博 等进行限制,可以缩小爬虫范围,并且更具有实用性。一般而言如果要对抓取的数据进行分析,都会采用这一方法来明确抓取的微博类型。
【附代码】python爬取新浪微博(微博内容,微博评论,用户信息等)并进行情绪分析_第2张图片
本文提供的代码可以抓取到 博文 相关数据, 用户 相关数据以及 微博评论 相关数据。

步骤:

  1. 安装依赖
    mongodb
    phantomjs
    redis
    requirements.txt

  2. 构建账号池
    购买微博小号
    将账号密码复制到 WeiboSpider/sina/account_build/account.txt
    运行 WeiboSpider/sina/account_build/login.py
    运行成功会显示cookie创建成功

  3. 修改 WeiboSpider/sina/redis_init.py 中的日期,关键词,运行该文件进行微博检索(代码中默认抓取热门微博,如需更改可将url中的sort设置为time)

  4. 开始爬虫:
    运行 WeiboSpider/sina/spider/weibo_spider.py 抓取目标数据
    建议采取多线程同时抓取,提高速度
    Mac用户在命令行中输入 scrapy crawl weibo_spider
    Windows用户在命令行中输入 scrapy runspider weibo_spider.py

爬虫过程截图:
【附代码】python爬取新浪微博(微博内容,微博评论,用户信息等)并进行情绪分析_第3张图片

(二)抓取任意微博数据

如果只是想要抓取任意微博,本文提供另外一种简单的方法,可以抓取目标用户的所有微博。请参考链接中的 WeiboSpiderSimple 文件夹中的内容。

步骤:

  1. 安装依赖
    mongodb
    requirements.txt
  2. 访问 https://weibo.cn/ 并登陆,获取对应的cookie,将 WeiboSpiderSimple/sina/settings.py 中的cookie换成你自己获取到的cookie
            
              DEFAULT_REQUEST_HEADERS = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:61.0) Gecko/20100101 Firefox/61.0',
    'Cookie':'OUTFOX_SEARCH_USER_ID_NCOO=1780588551.4011402; browser=d2VpYm9mYXhpYW4%3D; SCF=AsJyCasIxgS59OhHHUWjr9OAw83N3BrFKTpCLz2myUf2_vdK1UFy6Hucn5KaD7mXIoq8G25IMnTUPRRfr3U8ryQ.; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9WFGJINkqaLbAcTzz2isXDTA5JpX5KMhUgL.Foq0e0571hBp1hn2dJLoIp7LxKML1KBLBKnLxKqL1hnLBoMpe0ec1h5feKMR; SUB=_2A252a4N_DeRhGeBI61EV9CzPyD-IHXVVly03rDV6PUJbkdAKLRakkW1NRqYKs18Yrsf_SKnpgehmxRFUVgzXtwQO; SUHB=0U15b0sZ4CX6O4; _T_WM=0653fb2596917b052152f773a5976ff4; _WEIBO_UID=6603442333; SSOLoginState=1536482073; ALF=1539074073'
}

            
          
  1. 指定爬取的用户ID将 WeiboSpiderSimple/sina/spider/weibo_spider.py 中的 start_uids 换成你想抓取的对象的微博ID。
  2. 开始爬虫,执行 scrapy crawl weibo_spider 或者直接在pycharm当中运行 WeiboSpiderSimple/sina/spider/weibo_spider.py

爬虫过程截图:
【附代码】python爬取新浪微博(微博内容,微博评论,用户信息等)并进行情绪分析_第4张图片
【附代码】python爬取新浪微博(微博内容,微博评论,用户信息等)并进行情绪分析_第5张图片
【附代码】python爬取新浪微博(微博内容,微博评论,用户信息等)并进行情绪分析_第6张图片


文本情绪分析

工具及原理

基于Python的snowNLP库作为情绪分析的模型。模型原理是机器学习中的朴素贝叶斯分类方法。在对文本进行分词和去除停用词等一系列基础处理后,将单句评论的词汇作为模型的特征:
( ω 1 , ω 2 , . . . , ω n ) (\omega_1,\omega_2,...,\omega_n) ( ω 1 , ω 2 , . . . , ω n ) 再利用朴素贝叶斯公式打分:
P ( C 1 ∣ ω 1 , ω 2 , . . . , ω n ) = P ( ω 1 ∣ C 1 ) . . . P ( ω n ∣ C 1 ) P ( C 1 ) P ( ω 1 ) . . . P ( ω n ) P(C_1|\omega_1,\omega_2,...,\omega_n)=\frac{P(\omega_1|C_1)...P(\omega_n|C_1)P(C_1)}{P(\omega_1)...P(\omega_n)} P ( C 1 ω 1 , ω 2 , . . . , ω n ) = P ( ω 1 ) . . . P ( ω n ) P ( ω 1 C 1 ) . . . P ( ω n C 1 ) P ( C 1 ) 其中 C 1 C_1 C 1 代表积极类情绪,等式右边的计算基于训练好的模型,分数越高代表语句越积极。实际上是计算了训练出的特征的条件概率。

数据预处理和模型训练

  1. 利用 jieba 分词工具进行分词
  2. 使用哈工大停用词表去除停用词
  3. 基于 snowNLP 原有模型对数据进行积极和消极情感的分类
  4. 得到情感标签后,计算每个词在全部文本、积极文本和消极文本的频率,用以训练新的模型

代码参考:Sentiment analysis.ipynb


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论