电视剧《民国奇探》是一部充满搞笑风格的侦探剧,剧中主要人物:三途、四爷、白小姐、三兔的角色和《名侦探柯南》里的柯南很像但是有搞笑的属性,四爷和森小五郎很像但是有大哥范,武功也很强,三兔尚文和四爷是武侠,白小姐主要扮演傻白甜性格的角色。因为该剧目前大部分时间都在爱奇艺电视剧榜首,我自己也看了几集。总的来说,剧情紧凑,剧风搞笑。当然,让我印象最深的还是网友弹幕的搞笑对比,于是决定用Python爬下弹幕,一起来看看吧。数据爬取现在开始我们的爬取工作,首先用浏览器打开电视剧的网页,地址是:https://www.iqiyi.com/v_19rx2un304.html?vfrm=pcw_home&vfrmblk=B&vfrmrst=fcs_0_t12,我们使用开发者工具网络功能,进入网络控制台后,我们先使用Ctrl+R命令重新加载网页,然后通过过滤器搜索弹幕,如下图:这里的弹幕数据是一个压缩文件,格式为的.z是的,如下图所示:我们可以看到压缩文件的命名规则是tvid_300_n.z,所以我们先获取tvid列表,代码实现如下:defget_tvid():#tv_idlisttv_id_list=[]foriinrange(1,5):url='https://pcw-api.iqiyi.com/albums/album/avlistinfo?'\'aid=245212201&page='\+str(i)+'&size=30'res=requests.get(url).textres_json=json.loads(res)#视频列表move_list=res_json['data']['epsodelist']forjinmove_list:tv_id_list.append(j['tvId'])returntv_id_listget进入tvid列表后,我们可以根据tvid获取压缩后的弹幕文件,然后解压保存。实现代码如下:defsave_bullet(tvid):forpageinrange(1,10):url='https://cmts.iqiyi.com/bullet/'\+tvid[-4:-2]+'/'\+tvid[-2:]+'/'\+tvid+'_300_'\+str(page)+'.z'print(url)#请求弹幕压缩文件res=requests.get(url).contentres_byte=bytearray(res)try:xml=zlib.decompress(res_byte).decode('utf-8')#保存路径path='data/'+tvid+'_300_'+str(page)+'.xml'withopen(path,'w',encoding='utf-8')asf:f.write(xml)except:return文件存储到本地后,我们首先获取每个文件的完整路径名。实现代码如下:defget_file(path):forroot,ds,fsinos.walk(path):forfinfs:yieldroot+'/'+f获取所有文件的完整路径名后,然后根据全路径名获取文件,解析弹幕文本信息。实现代码如下示例:defget_bullet_text(f):DOMTree=parse(f)collection=DOMTree.documentElement#评论文本内容xml_list=collection.getElementsByTagName('content')content_list=[]forjinxml_list:content_list.append(j.childNodes[0].data)returncontent_list最后我们可以保存整个弹幕字符串信息,因为我这次爬取的弹幕信息不是特别多,所以我们先保存在一个txt文件中,实现代码如下图:defsave2txt(content):withopen('bullet.txt','a',encoding='utf-8')asfile:file.write(content)保存词云显示数据后,我们还会再来展示一下词云。代码实现如下:defjieba_():content=open('bullet.txt','rb').read()#jiebaword_list=jieba.cut(content)words=[]#过滤后的词remove_words=['still','won't','some','so','surely','up','something','why','really','so','but','how','still','when','one','what','myself','everything','like','same','no','not','onespecies','this','for']forwordinword_list:ifwordnotinremove_words:words.append(word)globalword_cloud#用逗号分隔单词word_cloud=','.join(words)defcloud():#打开词云背景图cloud_mask=np.array(Image.open('bg.png'))#定义词云的一些属性wc=WordCloud(#背景图片分割颜色为白色background_color='white',#backgroundPatternmask=cloud_mask,#显示最大字数max_words=300,#显示中文font_path='./fonts/simhei.ttf',#最大尺寸max_font_size=70)globalword_cloud#词云函数x=wc.generate(word_cloud)#生成词云图像image=x.to_image()#显示词云图像image.show()#保存词云图wc.to_file('mgqt.png')看效果:需要源码可以微信搜索公众号Python小二,后台回复200414自行收藏
