Day5- 综合大作业

第一步:爱奇艺《青春有你2》评论数据爬取(参考链接:https://www.iqiyi.com/v_19ryfkiv8w.html#curid=15068699100_9f9bab7e0d1e30c494622af777f4ba39)

  • 爬取任意一期正片视频下评论

  • 评论条数不少于1000条

第二步:词频统计并可视化展示

  • 数据预处理:清理清洗评论中特殊字符(如:@#¥%、emoji表情符),清洗后结果存储为txt文档

  • 中文分词:添加新增词(如:青你、奥利给、冲鸭),去除停用词(如:哦、因此、不然、也好、但是)

  • 统计top10高频词

  • 可视化展示高频词

第三步:绘制词云

  • 根据词频生成词云

  • 可选项-添加背景图片,根据背景图片轮廓生成词云

第四步:结合PaddleHub,对评论进行内容审核

这个题目整体难度并不大,已经预先给定了接口的名称,相应的实现也比较简单,唯一的缺点可能是函数doc string的不完善,让我对某些函数的作用有点云里雾里,估计也是赶工出来的,辛苦了。

这个题整体的思路是先使用request爬取爱奇艺视频的评论,在去除特殊字符后使用中文jieba分词对其进行分词,再使用matplotlib进行绘图和使用词云wordcloud进行词云的绘制,最后使用和谐词检测预训练模型porn-lstm对评论中的和谐词进行推断。

需要的配置和准备

  • 中文分词需要jieba

  • 词云绘制需要wordcloud

  • 可视化展示中需要的中文字体

  • 网上公开资源中找一个中文停用词表

  • 根据分词结果自己制作新增词表

  • 准备一张词云背景图(附加项,不做要求,可用hub抠图实现)

  • paddlehub配置

这里使用的session.get()是为了让我们多次的请求都保持同一个cookie,和user_agent一样在某种程度上让服务器认为我们是浏览器,防止被反爬虫(当然,假如你访问频次过快,还是会被ban ip的)。

注意我们在Day2-《青春有你2》选手信息爬取中所说的request是http静态库,无法渲染JS,而用chrome审查元素可以发现,评论都是通过JavaScript动态生成的。那怎么办呢?在不引入新的库的前提下我们可以通过逆向请求接口的方式来完成爬取。我们在爱奇艺的页面中下拉滚轮时会通过JS加载新的评论,而这些评论是通过下拉滚轮时请求网络相应的接口,将接口返回的JSON信息通过JavaScript动态渲染到浏览器上完成的动态加载。因此我们可以直接通过接口获取相应的JSON信息,而不需要再管JS的渲染。

通过观察可以看到lastId是我们接口请求的关键,我们一开始可以把lastid置0获得最初的评论,然后将返回的Json信息中最后一条评论的lastId返回,以此迭代以获得新的评论。

这里的停用词表对应的文本路径中应该要依据最后的词频图和词云的效果,添加相应的停用词使得其显示效果更好。我在其加入了几个明星的名字颠倒的词汇(我也不知道为什么会在评论里出现这种词,莫非是我跟不上时代了吗= =)。

这里一开始text_detection()的运行速度太慢了,后面调试发现是判断了多句重复的句子,而重复的句子的和谐度都是一样的,所以用Python的集合set()进行去重再转为列表list进行和谐度判断,果然快了很多。

这里也是强烈建议大家使用

而不是open(),这可以避免忘记关闭文件导致的IO错误。

运行结果如下:

词云这里使用的原图是miku,可以看到效果还是可以滴:

最后更新于

这有帮助吗?