Python--爬取酷我音乐上毛不易所有歌曲,用wordcloud生成词云

参考文章:http://blog.csdn.net/fontthrone/article/details/72775865

requests库的学习:https://zhuanlan.zhihu.com/p/20410446

爬虫原理介绍:http://www.cnblogs.com/zhaof/p/6898138.html

干货走起!

import requests
import re
from bs4 import BeautifulSoup

#反爬虫   动态设置user-Agent  参见http://www.cnblogs.com/rwxwsblog/p/4575894.html
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) Chrome/50.0.2661.102'}
# payload = {'wd': 'GitHub'}  # 搜索的关键字是GitHub
url = 'http://bd.kuwo.cn/mingxing/%E6%AF%9B%E4%B8%8D%E6%98%93.htm'  #毛不易主页
res = requests.get(url,  headers=headers)
# print(res.text)   #获得网页源码
#第1节:爬取所有毛不易歌词
website1 = 'http://bd.kuwo.cn'   #主网页
url = 'http://bd.kuwo.cn/mingxing/%E6%AF%9B%E4%B8%8D%E6%98%93.htm ' #毛不易主页
page = requests.get(url)  #get方式发送请求
# print(page.text)  #得到响应文本(html文档)

repr1 = r'/yinyue/\d+'  #正则表达式 匹配文本中所有“/yinyue/数字” 的字符串
LaternUrls = re.findall(repr1,res.text)[2:]  #列表切片,截取列表中第二个以及之后的字符串
# print(LaternUrls)  #输出['/yinyue/27101590', '/yinyue/27101590',。。。],
repr2 = r'lId\d+'    #用正则匹配 网页中

....等等 singText = '' #所有歌词合并后的文本 singList = [] #歌词列表 for url in LaternUrls: url = website1 + url #组合出歌词所在的网页url page = requests.get(url) page.encoding = 'utf-8' bs = BeautifulSoup(page.text,'html.parser') #URL的解析方式 id1 = re.findall(repr2,page.text) #所有的lId(数字) 的id列表 # print(id1,'ididiididididiididid') #["lId1","lId2","lId3","lId4".......] for i in id1: ciju = bs.find(id="%s"%i).get_text() # 网页中id属性 注意这里占位符的使用 singText +=ciju singList.append(ciju) print(singText) print(len(singList))

#第二节 去除特殊的符号,是文本更简洁
import jieba # 中文分词模块

ExceptChars = ['\n','\r\n',', ','(',')'] # 文本中无关的符号
L = [x for x in jieba.cut(singText) if x not in ExceptChars]  # 按照字典中词语 分词
print(L)
words_split_space = ' '.join(L)  #列表解析
print(words_split_space,len(words_split_space),'wwww')

#第三节生成词云图
import matplotlib.pyplot as plt
from wordcloud import WordCloud,ImageColorGenerator
import numpy as np
import PIL.Image as Image

imgShape = 'SmallCat.jpg'               # 读入背景图片 利用背景图片生成词云
img = Image.open(imgShape)
w,h = img.size              #获取背景图片的宽高
coloring = np.array(Image.open(imgShape))   #背景图片的颜色
my_wordcloud = WordCloud(background_color="white", max_words=2000, mask=coloring,max_font_size=40, random_state=42,font_path="C:/Windows/Fonts/simkai.ttf")
my_wordcloud.generate(words_split_space)
image_colors = ImageColorGenerator(coloring)

plt.imshow(my_wordcloud)
plt.axis("off")
plt.figure()

plt.imshow(my_wordcloud.recolor(color_func=image_colors),interpolation="bilinear",cmap=plt.cm.ocean) #cmap绘图时的样式,这里选择的是ocean主题。
plt.axis("off")
plt.figure()

#显示原图形
plt.imshow(coloring, cmap=plt.cm.gray,interpolation="bilinear")  #interpolation插值方式  
plt.axis("off")
plt.show()

最终生成如下词云图:

Python--爬取酷我音乐上毛不易所有歌曲,用wordcloud生成词云_第1张图片


你可能感兴趣的:(Python)