使用新浪微博开放平台api同步微博内容至自己网站(如何调用微博API爬单条微博的评论呢?(组图))

优采云 发布时间: 2022-01-29 17:24

  使用新浪微博开放平台api同步微博内容至自己网站(如何调用微博API爬单条微博的评论呢?(组图))

  当我沉浸在学习mysql、scrapy、django准备下一波吹水的时候,有人说,你可以爬下老薛的微博,蹭个热点,这让勤奋(mo)很难( mo) learning (kou) xi (jia) 我停止发几个代码了。

  

  然后赶紧关注了最近关于老薛的新闻……感受了剧情的复杂和*敏*感*词*的扑朔迷离……我默默的学会了看合同……怎么用ELA分析图片……论文怎么写……怎么查别人的银行对账单……一点小知识……让我慢一点……

  所以,这次的主题是分析老薛最新的微博评论,分析评论粉丝的心情,听我说。

  1.新浪微博API

  在经历了几次(非常痛苦的)爬虫禁令后,我学会了在爬 网站 之前检查 API 的“好”习惯。新浪作为大公司,怎么可能不推出新浪微博API?新浪有自己的开发者开放平台。我们就不讲python调用微博API的方法了。以下是登录App_key和App_secret访问微博。API的代码,代码基于Python2。Python3 使用 weibo 模块存在一定的问题。

  

  既然知道了如何登录API,那么如何调用API爬取一条微博评论呢?一行代码就可以做到。

  r = ments.show.get(id = 41509,count = 200,page = 1)

  一条微博的所有评论信息都在ments中。这里我们需要对比一下微博API文档。微博API中说调用微博评论API需要用户授权,但是捏~只要知道单条微博的id,就可以调用这个API后,再讲如何获取单条微博的id(小声点,别让微博知道,万一发了)。

  

  

  以client.interface name.get(request parameter)的方式获取API。获取API后,您可以在接口详情中查看规格。文档中有返回结果的示例。

  

  关键数据的json接口名称也在文档中给出。

  

  如果我们想获取微博评论的内容,只需要调用文本接口即可

  对于 st inments:

  文本 = st.text

  2.微博爬虫

  通过调用新浪微博API,我们可以简单的获取单条微博的评论信息。为什么简单,因为流行的信息很昂贵!你以为大V的微博只是免费给你API调用吗?未经认证的应用程序开发人员每天只能请求数千次 API。这对于老薛这种单条微博评论几十万的大V来说,是个大问题。说...太少(TT)

  所以捏,还是要写微博爬虫。

  俗话说,知己知彼,百战不殆。作为一家大公司,新浪一定经历了数百场战斗。它一定经历过无数次爬虫与反爬虫的战争,一定有完善的反爬虫策略。俗话说,面对强敌,绕道而行。一个老板说的好,爬网站,先爬移动端

  

  登录微博后,去老薛的微博回应P图事件,_(:зゝ∠)_老薛,怪我,怪我来不及,点进去的时候已经有70w+评论了(截至发文当天已有100w+评论),静谧的微博下,可见粉丝的不安之心……

  移动端微博的URL简洁明了,不像PC端的逻辑那么复杂不清楚:

  从xhr文件我们可以知道,热门评论的变化规律是:

  ';id=' + 单条微博id + '&type=comment&hot=1&page=' + 页码

  最新评论的变化规律是:

  '' + 单个微博id + '&page=' + 页码

  打开可以看到热门评论的json文件。

  接下来就是套路,伪装浏览器头,读取json文件,遍历每一页……这不是重点!而这些我之前都讲过~直接上代码~这里是Python3的代码~

  

  这里有几点注意事项:

  设置爬取间隔后,微博爬虫被封禁的概率大大降低(尤其是晚上)

  新浪每次返回的json数据个数是随机的,所以翻页后会有数据重复,所以使用了重复数据删除,后面会讲到。

  添加删除文本和源码中的emoji表情的代码(写入数据库花了很长时间,几乎从删除库到逃跑/(ㄒoㄒ)/),还删除了对别人的回复与它混合。html代码。

  我只写了读取的数据,没有写怎么保存,因为我们需要统计!根据!图书馆!热的!(这才是重点!敲黑板)

  在python中读取和写入数据库

  微博爬虫虽然大大增加了数据获取量,但也因为是爬虫而轻易被新浪封杀。这里结束循环的判断是网络状态不是200,但是当微博发现是爬虫时,微博会返回一个网页,网页中并没有真实的内容。这时候程序会报错,而之前爬取的数据,什么都没有了。

  

  但是如果你爬一会儿,保存一次数据,数据量会增加……冷文件随机射在猿脸上……我的心就像是……这时候,我们需要使用数据库。

  数据库,顾名思义,就是存储数据的仓库。数据库作为一个发展了60多年的管理系统,应用领域巨大,功能复杂……好吧,我不能再编辑了。

  在本文中,数据库的主要作用是一个AI风格的excel表格(●—●)。在爬取的过程中,爬取的数据会存储在里面,爬取的数字也会存储在里面。即使爬虫程序中断,中断前爬取的数据也会存入数据库。

  

  大多数数据库都可以用python,我知道mysql、sqlite、mongodb、redis。这里是mysql,mac上mysql的安装,Navicat的使用,管理数据库的软件,其他系统大家可以自己找,如果安装使用过程中出现问题,请不要找我(溜走)根据上面的代码,在navicat中创建数据库、表和字段,以及字段的格式。将代码添加到 Python 程序。

  

  运行python程序,我大概爬了2w实时评论。不得不说,新浪微博的反爬还是很厉害的。解决方案有两种:更改IP和切换帐户。我之前写过关于IP代理的使用。可以在宝藏上购买,但是!_(:зゝ∠)_因为这篇文章的作者是个很穷也经常小气的人,而且身患重病(懒癌)……2w条数据也有研究价值,对吧(((;꒪ꈊ꒪ ; ))),让我们继续我们的研究 (((;꒪ꈊ꒪;)))...

  在进行下一步之前,我们还需要读取数据库的内容,python中读取数据库的代码也很简单。

  

  这样就读出了之前爬取的信息,但是前面已经提到,微博爬虫在翻页的时候返回的数据个数是随机的,所以会出现重复的情况,所以读完之后需要使用使数据变得繁重的 if 语句。

  

  4.自然语言处理

  自然语言处理是人工智能的一个领域。机器可以通过算法设计来理解人类语言。自然语言也是人工智能的难点。汉语等语言是深奥难测的。最大的困难是python中有很多与NLP相关的模块。感兴趣的朋友可以通过在python中实现简单的文本情感分析来探索NLP。

  我拿了(ban)test(yun)一些现成的情感分析算法,对爬取的评论进行分析。错误率很高_(:зゝ∠)_,怎么办?算法应该重新设计吗?好像遇到了人生第一个大问题,就是没学好语言……

  当然,像我这样聪明(lan)和生活(duo)的女孩子,自然很快就发现了python中的一个中文著名的NLP库:snowNLP。snowNLP调用的方法比较简单。调用方法和生成结果在源码中有详细说明。

  

  这段代码读取数据库后获取评论正文生成的列表文件,依次对每条评论进行情感值分析。snowNLP 可以根据给定的句子生成一个介于 0 和 1 之间的值。当值大于0.5时,表示句子的情感极性更积极。当分数小于 0.5 时,情绪的极性偏向于负面。当然,越是朝着两个脑袋,情绪越明显。我们来看看测试评论的结果。

  

  第一项:恶心给了0.01分,最后一项:支持薛之谦给了0.99分。看其他基本符合上下文的句子的态度,当需要对单个产品的评价态度进行评价时,可以使用snowNLP。但由于老雪的评论涉及到他本人、李雨桐、高磊鑫三个人,算法无法判断评论的情感价值是谁的,而且微博评论可以由粉丝互相回复,这使得确定评论的主题是谁。这更令人困惑(机器说我无法学习......)。

  这似乎意味着这个分析的结果将是……没有用处。我不希望这种事情发生……我是人……最重要的是要开心……我不会写算法,我的语言也不好,我真的做不到(๑°⌓°๑)@ >…

  

  5.分析结果

  这次分析的目的愉快地从分析粉丝对薛之谦事件的情绪转变为单纯分析粉丝的情绪(●—●)。

  plt.hist(sentimentslist,bins=np.arange(0,1,0.02))

  plt.show()

  统计上一节处理的情感值列表,生成分布图。以下数据采集时间为9月27日19:00,采集2w条评论。

  

  对了(真的对了,一脸正经)我还爬了2w条李雨桐转发网友捐款的微博评论。

  

  对了(真的对了,看我真诚的眼神)我爬了微博评论说陈赫作弊时发错博了。

  

  从这三张图可以看出,在0、1的末端和0.5附近的情绪值更频繁,说明粉丝对此类事件的情绪是正面的还是负面的。比较明显。但是您也可以从图片中看到一些细微的差异。老薛微博中接近1的情感值数量高于接近0的数量,但没有超过700个。李雨桐微博中接近1的情感值数量要低得多。 0,甚至接近0的数字也达到了1000多,但都超过了700,而陈赫的微博分析结果显示,两者都接近800。由于算法存在一定误差,不代表真实审查结果,所以我不再分析它(你知道的)。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线