码农前段时间写了很多关于股票、报表自动化的内容,吸引的大批的直男粉丝,这是公众号后台的粉丝性别分布图:
众多的MM粉丝表示看不懂码农的帖子,为了改变这种现状,码农决定写点其他内容的帖子,比如说今天这篇关于娱乐八卦的帖子,希望各位MM看官喜欢。
想到写这个主题,是因为最近正好有一部吃瓜综艺在芒果台大热,那就是这部《乘风破浪的姐姐》。码农今天带大家用python去看看谁是你最喜欢的小姐姐~
豆瓣评论
码农从豆瓣上看了下网友对这部综艺的评分,总体评分8.4也还算不错。
那看看推荐的网友们都有些啥评价,码农祭出Python爬虫大杀器selenium来,爬了200条评论,然后我们看看网友的关键词都有些啥。
没想到啊,大家讨论最多的明星是星女郎张雨绮。
艺人百科数据大PK
下面,码农通过从百度百科下载了30位参赛女艺人的相关信息,通过数据可视化的方式了解下这些姐姐们的情况。
先看下年龄分布,大部分的姐姐都是集中在30-40岁,其中30-35岁之间的占了40%。
接下来,看下大家的星座分布。白羊座是最多的,其次是水瓶和金牛。
再看下血型分布,百度百科真是啥都有。O型血果然是大众血型。
接下来看看他们的家乡,果然芒果台还是请湖南的明星居多。万茜、刘芸、孟佳、沈梦辰、阿朵都是湖南人。
最后是身高和体重分布,大家的平均身高是166.54cm,平均体重是47.7Kg。
到底哪几个小姐姐最终会成团,谁又是你心目中的C位,快来码农的公众号留言吧。
如果你还没有看过瘾,那就自己动手去爬更多的数据去看吧。码农会贴出部分代码,供各位看官参考哟。
Python 部分代码
1.豆瓣评论爬取
def get_douban_comment(page):
browser.get("https://movie.douban.com/subject/34894589/collections?start="+str(page))
browser.find_element_by_class_name('sub_ins')
df1=browser.find_element_by_class_name('sub_ins')
df2=df1.find_elements_by_tag_name('table')
comment=[]
star=[]
for i in df2:
if len(i.text.split('\n'))==3:
comment.append(i.text.split('\n')[2])
else:
comment.append('')
x=i.find_element_by_class_name('pl')
try:
star.append(x.find_element_by_tag_name('span').get_attribute('title'))
except:
star.append('')
print("https://movie.douban.com/subject/34894589/collections?start="+str(page)+' 解析完成')
print('解析评论%s条'%len(comment))
return comment,star
Cmt=[]
Star=[]
for i in range(10):
a,b=get_douban_comment(i*20)
for i in a:
Cmt.append(i)
for j in b:
Star.append(j)
df=pd.DataFrame({'star':Star,'Comment':Cmt})
df.to_excel(r'e:/cfpl/comment.xls',index=False)
2.百度百科爬取代码
from selenium import webdriver
import pandas as pd
import time
import pickle
import os
#获取艺人清单和百度百科链接
def get_name_list():
browser = webdriver.Chrome(r'chromedriver.exe')
browser.get("https://baike.baidu.com/item/%E4%B9%98%E9%A3%8E%E7%A0%B4%E6%B5%AA%E7%9A%84%E5%A7%90%E5%A7%90/49998987?fr=aladdin#3")
a=browser.find_elements_by_tag_name('table')
b=a[1].find_elements_by_tag_name('tr')
list1=[]
for i in b:
c=i.find_elements_by_tag_name('td')
if len(c)==4:
for i in c:
list1.append(i)
name=[]
link=[]
for i in list1:
try:
k=i.find_elements_by_tag_name('a')[0]
print('艺人: %s,百科链接: %s' %(k.text,k.get_attribute('href')))
name.append(k.text)
link.append(k.get_attribute('href'))
except:
pass
browser.quit()
return name,link
name,link=get_name_list()
f=open(r'E:/cfpl/name.txt','w')
for i in name:
f.write(i+'\n')
f.close()
def get_data(link,name):
browser = webdriver.Chrome(r'chromedriver.exe')
browser.get(link)
b=browser.find_element_by_class_name("main-content")
c=b.find_elements_by_class_name('basic-info')[0]
t1=[]
t2=[]
for i in c.find_elements_by_tag_name('dt'):
t1.append(i.text)
for i in c.find_elements_by_tag_name('dd'):
t2.append(i.text)
d={}
for i in range(len(t1)):
d[t1[i]]=t2[i]
file='E:/cfpl/'+name+'.pkl'
f=open(file,'wb')
pickle.dump(d,f)
f.close()
print('%s pkl write down'%name)
browser.quit)()
#下载数据
for i in range(len(name)):
get_data(link[i],name[i])
3.可视化代码--饼图
#年龄可视化
data['年龄']=[int((datetime.datetime.now()-i).days/365.25) for i in data['出生日期']]
age_cut=[25,30,35,40,45,50]
age_label=['25-30','30-35','35-40','40-45','45-50']
data['年龄段']=pd.cut(data['年龄'],age_cut,labels=age_label)
from pyecharts import Pie
pie=Pie('年龄分布')
df1=data['年龄段'].value_counts()
df1=df1[df1.values>0]
pie.add('',df1.index,df1.values,is_label_show=True,is_legend_show=False,radius=[40,75])
pie.render(r'e:/cfpl/年龄分布.html')
pie
4.可视化代码--柱状图
#星座可视化
from pyecharts import Bar
bar1=Bar('星座分布')
df2=data['星座'].value_counts()
bar1.add('',df2.index,df2.values,is_label_show=True,is_legend_show=False,mark_point=['max'])
bar1.render(r'e:/cfpl/星座分布.html')
bar1
5.可视化代码--地图
df6=data['出生地所在省市'].value_counts()
from pyecharts import Map
map=Map('出生地分布')
map.add('',df6.index,df6.values,is_visualmap=True,visual_range=[0,5],is_lagend_show=True)
map
6.可视化代码--词云
import jieba
from jieba import posseg as psg
from collections import Counter
def nlp(file):
#导入停用词库
stopwords = [line.strip() for line in open(r'cn_stopwords.txt', 'r', encoding='utf-8').readlines()]
name=[]
f=open(r'e:/cfpl/name.txt')
for i in f:
name.append(i.strip())
f.close()
for i in name:
jieba.add_word(i,tag='nr')
t=open(file).read()
#不需要考虑的词性
nowords = ['x','uj','ul', 'p','d', 'v','zg','m','ug','i', 'f', 'ad','nz', 'r', 'r', 'ns','q','t','c']
words =[x.word for x in psg.cut(t) if len(x.word)>=2 and (x.flag) not in nowords and x.word not in stopwords]
word_count = Counter(words)
from pyecharts import WordCloud
wc=WordCloud('')
wc.add('',list(word_count.keys()),list(word_count.values()),shape='circle')
return wc
nlp(r'e:/cfpl/力荐.txt')
?