之前完成了对于各大视频网站的热搜、热播的数据爬取布置,现在系统每4小时自动爬取数据,并且判断是否重复,若为新的数据则存到设置好的Mongodb中。
这次主要对于三个月爬取的爱奇艺热搜榜的热搜词做一个词云模型,以获取三个月以来热搜的热点词。
爱奇艺热搜榜(http://v.iqiyi.com/index/)如下图所示:
爬取的数据存到数据库中如下图所示:
首先,我们要从Mongodb中导出我们需要的数据。使用python的pymongo库实现与mongo数据库连接,具体代码如下:
mongo_server="ip:port" #这里是你的mongo服务器的ip地址和端口号
uri ='mongodb://' + mongo_server
mongo_client = MongoClient(uri)
db = mongo_client['video_spider'] #数据存储的数据库名称
collection = db['iqiyi_hotsearch'] #数据具体存在的数据表
完成上述配置后,我们就可以根据数据库中存储的数据格式获取我们需要的数据。我们只需要取出爬虫时间以及关键词,具体代码如下:
for i in collection.find({"type":"热搜"}): #我们将热搜榜的类型设置为“热搜”
data_dict[str(i["time_crawled"])] = [] #为数据存储字典设置key值,key为对应的爬取时间
for j in range(len(i["word"])):
data_dict[i["time_crawled"]].append(i["word"][j]["title"].encode('utf-8')) #在“word”的数据中,仅取出title字段的数据
这里需要注意的是,数据的编码问题,因为存储在数据库中是unicode,我们需要编译为utf-8格式,才能正确显示中文,同时代码开头也不要忘记申明。
将数据存成txt格式预览(因为字典是无序的,所以排列不按时间顺序):
至此,我们得到了处理的语料。
将语料存入列表中:
keywords_list = []
for index, item in enumerate(data_dict):
for i in data_dict:
keywords_list.append(i)
得到的关键词列表存储为txt格式:
with open("keywords_list.txt",'w')as f:
for i in keywords_list:
f.write(i)
f.write(",")
f.close()
在word art网站(https://wordart.com/create)上生成词云,如图:
这里尝试了使用wordle,图悦等在线生成器,其中支持中文的较少,图悦的关键词分割不是很满意。又尝试了利用wordcloud库生成词云,但是在linux服务器上,中文字体问题没有得到解决。
之后又使用了nltk做了一个词频统计,存成csv格式如下图:
同样因为linux字体问题,词频图的中文无法显示,故没有贴图。
接下来想对热搜榜的视频通过豆瓣接口,进行类别,评分等数据爬取,分析热搜与类别,评分等背后关系。