有态度地学习

上一份的推送是关于QQ音乐所有评论的获取,这一次讲讲QQ音乐精彩评论的获取。翻了一下QQ音乐热歌排行榜上的歌,发现QQ音乐热评多的歌不多,所有评论和网易云音乐比起来也挺寒碜的,只能说网易云不愧是文艺小青年的聚集地。不过不能因为评论少就不爬了,见面就是莽,不虚。

通过本次爬取,学习了非关系型数据库,文档型数据库MongoDB。另外公众号的排版也变的更加美观了,尤其是底部多了推荐阅读和扫码关注。在借鉴其他公众号的排版之后,用自己半吊子的PPT水平做了底部的照片,喜欢的可以点个赞呀!

就目前的了解,MongoDB的优点:无需设置固定结构(嵌套),也不必考虑数据类型匹不匹配,对数据的可操作性也更大。这回也是一样在Mac上操作,在Mac上安装了MongoDB以及MongoDB的可视化工具Robo 3T,Robo 3T作为一款免费轻量级GUI,简单且易上手。


创建数据库,表格及插入数据。

import pymongoclient = pymongo.MongoClient(host='localhost', port=27017)db = client.QQ_Musiccollection = db.commentscomments = {    "nike": "꧁༺詩光༻꧂",    "comment": "释迦摩尼说 :无论你遇见谁, 他都是你生命中该出现的人 ,绝非偶然。",    "praisenum": "7817",    "comment_id": "song_7072290_1772758010_1486708168",    "time": "2017-02-10 14:29:28"}result = collection.insert(comments)print(result)

针对QQ音乐中平凡之路的网页进行分析,通过不断点击加载更多,发现了请求网址的变化参数:pagenum、jsoncallback。通过上期的爬取,我们知道jsoncallback对于请求是没有影响的,所以这回更简单,只需改变页码即可。而lasthotcommentid则是第一页精彩评论的最后一个ID,短时间内基本不变。

平凡之路精彩评论一共有624条。每一个请求页10条数据,第一页例外,有15个,但是最后却只获取了595条,这是因为评论中有追评的,没有原创评论,所以直接剔除,当然还有评论已经删除的,直接就没有评论信息了。

爬取代码如下:

import reimport jsonimport timeimport pymongoimport requestsclient = pymongo.MongoClient(host='localhost', port=27017)db = client.QQ_Musiccollection = db.commentsdef get_html(url, headers):    try:        response = requests.get(url=url, headers=headers)        response.raise_for_status()        response.encoding = 'utf-8'    except requests.HTTPError:        print("connect failed")    return responsedef parse_html(html):    data = {}    content = json.loads(html[30:-3])    for item in content['comment']['commentlist']:        if item.get("rootcommentcontent"):            data["nike"] = item.get("nick")            data["comment"] = re.sub(r"\\n", " ", item.get("rootcommentcontent"))            data["_id"] = (re.sub(r"\n", " ", data["comment"]))            data["comment"] = (re.sub(r"\n", " ", data["comment"]))            data["praisenum"] = item.get("praisenum")            data["commentid"] = item.get("commentid")            data["time"] = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(int(item.get("time"))))            yield datadef to_mongodb(data):    try:        collection.insert(data)        print("Insert the data successfully", data)    except:        passdef main():    for i in range(63):        url = 'https://c.y.qq.com/base/fcgi-bin/fcg_global_comment_h5.fcg?g_tk=5381&jsonpCallback=jsoncallback05763744516059277&loginUin=0&hostUin=0&format=jsonp&inCharset=utf8&outCharset=GB2312¬ice=0&platform=yqq&needNewCode=0&cid=205360772&reqtype=2&biztype=1&topid=7072290&cmd=6&needmusiccrit=0&pagenum=%s&pagesize=10&lasthotcommentid=song_7072290_2856798698_1489491834&callback=jsoncallback05763744516059277&domain=qq.com&ct=24&cv=101010' %i        headers = {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'}        time.sleep(2)        response = get_html(url, headers)        for item in parse_html(response.text):            to_mongodb(item)if __name__ == '__main__':    main()    print("Finish The Work")

最后成功获取评论信息


读取MongoDB中评论数据,生成词云

from wordcloud import WordCloud, STOPWORDS, ImageColorGeneratorimport matplotlib.pyplot as pltimport pandas as pdimport pymongoimport jiebaimport reclient = pymongo.MongoClient('localhost', 27017)db = client.QQ_Musictable = db.commentsdata = pd.DataFrame(list(table.find()))data = data[['comment']]text = ''for line in data['comment']:    r = '[a-zA-Z0-9’!"#$%&\'()*+,-./:;<=>?@,。?★、…【】《》?“”‘’![\\]^_`{|}~]+'    line = re.sub(r, '', line)    text += ' '.join(jieba.cut(line, cut_all=False))backgroud_Image = plt.imread('luck.jpg')wc = WordCloud(    background_color='white',    mask=backgroud_Image,    font_path='msyh.ttf',    max_words=2000,    stopwords=STOPWORDS,    max_font_size=130,    random_state=30)wc.generate_from_text(text)img_colors = ImageColorGenerator(backgroud_Image)wc.recolor(color_func=img_colors)plt.imshow(wc)plt.axis('off')wc.to_file("幸运.jpg")print("生成词云成功")

幸运.jpg

··· END ···

©著作权归作者所有:来自51CTO博客作者mb5fe18ec4a4df8的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 18个常见的数据分析面试题-概率统计类
  2. Python数据可视化:2018年电影分析
  3. 数据分析都会用到哪些工具?
  4. QQ音乐评论爬取
  5. 2020年小红书校招数据分析笔试题
  6. 数据分析中会常犯哪些错误,如何解决?
  7. 如何进行数据图形化?
  8. 数据分析应关注AARRR模型的哪些指标
  9. 深入浅出数据分析

随机推荐

  1. 深入学习C++必读书籍(推荐)
  2. C++中字符串比较函数strcmp怎么用?
  3. c++如何比较两个字符串?
  4. c++中类的定义是什么
  5. c语言fun函数有什么例题?
  6. 决定数组所占内存单元多少的是什么
  7. c语言如何用if判断成绩等级?
  8. c语言中整除符号怎么表示?
  9. 表达式求值的c语言代码是什么?
  10. 算术运算符、赋值运算符和关系运算符的优