基于python的舆情分析,python舆情系统开发

  基于python的舆情分析,python舆情系统开发

  关于一个idea wap版贴吧现在再次生效(2020年4月29日)!贴死它,这就是现状。据说百度的贴吧群没有新人加入,只允许出的不允许进。可以说,太阳快死了。但是作为第一华人社区还是有很大的影响力的,同时女朋友的工作性质又和贴吧息息相关,所以我准备准备这样一个贴吧监控助手项目。

  再者,就是开始舆情分析,大数据挖掘,走近前沿。

  【外链图像传输失败,源站可能有防盗链机制。建议保存图片直接上传(IMG-2 bfpygib-1588146402090)(3358 Pb NSC 9 qw g.bkt.clouddn.com/u=3105521460,2871723561fm=27gp=

  开始考虑的性质和网易云还是有很大区别的,所以方向也不一样。

  前期工作的难点在于判断贴吧的加载是否为ajax。经过研究发现,虽然不是静态加载,但是早些年的老贴吧应该是静态加载,然后匿名发帖,权限删除泛滥,导致现在的ajax形式,也是大势所趋。但是对于网易云音乐的不同分析和发帖请求,并没有xhr或json形式的数据帖,不过好在发帖是get形式,没有加密数据体。

  只收到一页,估计是百度处理过的。至于为什么不是json,原因是防止它作为第三方客户端使用。毕竟百度自己的贴吧客户端确实不好用。

  但是在研究过程中发现网页版贴吧并没有关闭,不用登录就可以查询所有相关的建筑,页面代码也更加友好。所以我改用网页版来贴。

  api地址是:

  单个贴吧

  http://tie ba . Baidu . com/mo/q—9 cc 3c d 881 b 0 Fe 2 ba 30 f 4559 a 6 af8 a 941:FG=1-SZ @ 320 _ 240,-1-3-02-wapp _ 1531379582221 _ 177/m?Kw=林俊杰lp=5011lm=pn=0

  关键词:kw=林俊杰,pn=页数(0,20,40,60…)

  api首先要考虑的是轮子能不能先造好,这样一步一步的过程才能方便整个项目的拆分和功能的明确。所以先尝试集成贴吧的api,后期的监控通过api调用。

  获取贴吧ID web端模拟web访问。经过多次尝试,发现贴吧的web端不需要模拟手机就可以直接访问。但是我们无法知道在某个时间点是否会被限制,所以我们为他模拟token。

  用户代理: Mozilla/5.0(Linux;安卓5.0;SM-g 900 build/lrx 21t)Apple WebKit/537.36(KHTML,像壁虎一样)Chrome/67 . 0 . 3396 . 99 Mobile Safari/537.36 集成头文件后,就可以开始编写api规则了。

  俗称我发现不错的api,它们的形参设置特别清晰巧妙。这里先开发一个贴吧首页的帖子ID集合,按页面返回。所以,我需要知道调用者想要访问哪个贴吧,想要哪几页的参数。你不能无休止地往上爬,所以这里有一个范围。

  这里设置了三个参数。

  Key: Post关键字Start: Start Pages End: End Pages虽然键值是一个Post关键字,但是影响关键字是否错误。还没有建立(封锁)酒吧吗?这些情况都需要分析处理。End需要关心的是关键是否有这个页面,比如一个新的贴吧。他只有3页的帖子,但我们必须结束到6页。显然,这是不合适的,所以也应该在这里处理。Start和End有同样的问题,但是从实用的角度来看,如果End解决了,Start也就解决了。

  网页端的页数表达和PC端不同,以20为一页,所以这里需要进行转换:

  Start=Start*20-20#防止输入0的情况如果Start==-20:Start=0 end=end * 20 for I In range(Start,end,20)在观察第一页(我们也以第一页为例)时,我需要得到的关键信息是标题、作者、时间和kz(ID

  所以在这里你可以直接用BeautifulSoup得到它:

  Soup.select(div.i )获取的内容:

  其实还是可以用BeautifulSoup来处理,但是为了省事,可以直接用re正则表达式来解决。

  pattern=re.compile(kz=(。*?).*?(.*?)/a.*?回([0-9]\d*)\s(。*?)\s(。*?)/p ,re。s)

  差不多完成了,只需要修复标题,去掉“11之类的html代码。\xa0 "。

  接下来,为了成为第三方客户端(友好),我们需要在这里做一个分页过程。

  page={ str(int((I 20)/20)):SouList } JSON={ id :items[0][0], title: title, reply: items [0] [2], author: items [0] [3

  Result=json.dumps (return json,guarantee _ ascii=false)唯一需要注意的是,在赋值的过程中,python的原理好像是引入类型。代码注释里也提到了,所以想介绍一下复制包。

  super list . append(copy . deepcopy(page))这个基本上完成了一个api接口,返回的形式是json。

  结果返回者:

  验证结果:

  获取帖子内容在获取了帖子的基础数据之后,就需要获取页面内容了。网上的帖子内容很简洁,没有广告。

  最重要的是,与web端相比,web端的建筑不受登录限制,我们可以无条件获取任何想要的建筑的信息。唯一需要注意的是,每栋楼的层数是不确定的,所以这里的判断不能以页数为依据。在这里,我是测试结果后才明白的。

  所以我想了想,发现大楼到了最后一页,没有内容后没有“下一页”提示,就用“下一页”作为关键词进行筛选。

  这里ID是唯一的参数,这部分基本和获取ID一样。这里需要注意的是,首层不同于其他建筑,所以re需要分情况处理:

  Count==1,page==0:pattern=re . pile( class= I 1楼。\s(。*?)表。*?span/class= g a rel= external no follow rel= external no follow href=。*? (.*?)/a.*?class=b (。*?)/s ,re。S) items=re.findall(pattern,str(one content))Text=items[0][0]Author=items[0][1]Time=items[0][2]SonDict[ Text ]=Text SonDict[ Author ]=Author SonDict[ Time ]=Time SonDict[ Floor in Floor ]= fat list . append(copy . deep copy(SonDict))else:pattern=re . pile( class= I \ d * building .\s(。*?)表。*?span/class= g a rel= external no follow rel= external no follow href=。*?(.*?)/a.*?class=b (。*?)/span。*?rel=external nofollow href=(。*?)回复(。*?)/a ,re。S) items=re.findall(pattern,str(one content))Text=items[0][0]Author=items[0][1]Time=items[0][2]Floor=items[0][4][1:-1]# print(items)Floor ior=[]if not(Floor== 或Floor==None):# print(items[0][2])Floor=getfloor ior(URL=items[0][3])SonDict[ Text ]=Text SonDict[ Author ]=items[0][1]

  因此,经过与上述相同的处理后:

  关于关键词和舆情的情绪,从无到有,经历了三步三部。

  从需要收藏的帖子入手,获取相关的帖子内容。这里API的两个重要方法都应用到了,可以称之为采集阶段。

  从要分析的关键词入手,分析第一部分获取信息,分类处理,一般来说第二部分是核心。

  获取与关键词相关的内容,并对其进行处理,如何更直观的将内容呈现给需求方,是一个经验和思路的考验。

  配置与小程序相比,这里需要配置文件来启动初始化参数。所以通过API和刚刚提到的第一部分,我列出了这些参数。

  Tb:需要监控的帖子名称:必不可少:监控关键词:开始:起始页:结束页:睡眠:运营周期内的一些监控不需要实时反馈,所以在这里,睡眠是用来休息的,休息一段时间后,我们会重新监控集合。

  很明显,我们监测的贴吧和关键词并不是单一的,所以我们使用configparser库读取配置文件并转换成列表,方便程序的初始化和运行。

  config=config parser . config parser()#编码应设置为utf-8-sig而不是UTF-8 config . read( tiebase Setting . conf ,encoding= UTF-8-SIG ) key=config . get( Setting ,)TB )key list=key . split( customize , essential )essential list=essential . split(,)# rest period X=config . getint( Setting ,Sleep)#开始页码start=config.getint (setting , start) #结束页码end=config我这里只需要ID,然后用API的GetTiebaOne()方法,把帖子加载到一个列表中之后,就可以得到帖子了。得到想要的东西后,就要开始处理了。

  关键词分析:关键词分析在第二部分很重要。上面提到的关键字存储在列表中,所有内容都在列表中遍历。其实这里有一个很重要的小技巧,就是你可以在处理第一部分内容的时候做一个判断,而不是在接入之后再做单独的处理,这样必然会降低效率。

  DEF ONE TOONE(text):for I in essential list:if I in text:return true当然,如果是类似于这个的舆论导向方案,那就另当别论了。如果做热点分析,这里可以用分词来处理,分析处理几个常用的高频词,最后呈现近期热点。

  这只是一个吸引玉石的想法,还有更多好的想法有待发现…

  其实演示部分是修改最多的,修修补补。应该有更新和比较,因为这里周期性的性质是用来比较相邻期间的差异的。

  def comparison dict():for x in save:for I,y in zip (old save,range (1,len (old save) 1)): if x==i: #不保存则值相同[x]==old save[I]:new list . append(str(I))break if y==I:new list . append(str(x))old save . clear()old save . update(copy . deepcopy(save))save . clear()这段要小心很多陷阱。

  很多不必要的信息和一些html代码需要删除。然后,内容可以用不同的方式呈现。

  现在,我们可以动态地修改需求的配置内容,因为相关性正在发生变化。

  然后呈现给需求者:

  微信控件微信是我一开始就用来做控制器和显示器的东西,所以需要加入itchat包。

  先是加入图灵机器人,因为想找个聊天伙伴,然后加入了贴吧的舆情监测。

  图灵需要接入图灵官方API,只需要注册一个图灵,申请一个免费的密钥就可以了。

  图灵官网

  然后加入监控,需要多线程。简单的示例程序和单线程是无法完成的。虽然只需要手动下命令就能完成,但是效率很低,面对大贴吧也进不去或者到不了,所以加入线程,设置循环。你只需要前期配置配置文件,剩下的可以自己操作。获取数据后,会自动发送。

  因此,这里需要再打开一个线程来开始监控和修改配置:

  def Main():global T while 1:C=tieba。main()print( This is myit chat: str(C)]print(T)if C==None或C==[]Or== :continue if T==1:T=0 if T==0:it chat . send _ msg( updated data monitored \ n \ n str(C),to username=id)tieba . ini()tie=threading . thread(target=main)

  If [text]==打开监控 and (ID==或ID==none): # Reference全局变量ID=msg[ from username ]it chat . send _ msg(监控已打开~ ,toUserName=id)it chat . send _ msg(tieba . Setting(),To username=ID)返回if msg [text]=修改配置 and ID==msg[ from username ]:Setting=tieba . get Setting()a={ 监控帖子列表:设置[0],监控关键字:设置[设置

  修改配置:

  监控内容:

  Github项目的完整程序在我的Github上:

  贴吧-API-感悟

  这个项目想了很久,来回花了半个月。其实一个一周就能完成的小demo,拖了这么久。有很多原因要思考,不仅有程序之外的原因,还有程序后面的设计和思路在建立的时候没有认真考虑,反而是在修修补补修正问题。

  这是不可避免的耗时耗力。

  但是这个项目涉及的算法很少。虽然可以使用一些算法,但在设计过程中,我们仍然希望将重点放在简单性上。还是那句话,有些技巧和方法还是不够熟练。不了解这种方法的设计思路和原理。虽然学到了很多,但还是不够。

  基本上我们现在可以做很多事情,但是还是要继续学习很多专业,比如一些前端原理,http原理。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: