1. 首页
  2. 未分类

校花转学到我们班,于是我用Python把她空间给爬了个遍

“u003Cdivu003Eu003Cpu003Eu003Cstrongu003E开发环境:win7下的u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003Epython3.5、MySQL5.7u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E编辑器:u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003Epycharm2017.1、ipython,Navicat for mysqlu003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E需要的python第三方库:u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003Eselenium、PIL、Requests、MySQLdb、csv、pandas、numpy、matplotlib、jieba、wordcloudu003Cu002Fpu003Eu003Cpu003E另外还用到了无头浏览器PhantomJS。u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E主要思路:u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E一、通过selenium+phantomjs模拟登录qq空间取到cookies和g_qzonetoken,并算出gtku003Cu002Fpu003Eu003Cpu003E二、通过Requests库利用前面得到的url参数,构造http请求u003Cu002Fpu003Eu003Cpu003E三、分析请求得到的响应,是一个json,利用正则表达式提取字段u003Cu002Fpu003Eu003Cpu003E四、设计数据表,并将提取到的字段插入到数据库中u003Cu002Fpu003Eu003Cpu003E五、通过qq邮箱中的导出联系人功能,把好友的qq号导出到一个csv文件,遍历所有的qq号爬取所有的说说u003Cu002Fpu003Eu003Cpu003E六、通过sql查询和ipython分析数据,并将数据可视化u003Cu002Fpu003Eu003Cpu003E七、通过python的第三方库jieba、wordcloud基于说说的内容做一个词云u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E闲话不多说,直接上代码u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E通过selenium+phantomjs模拟登录qq空间取到cookies和g_qzonetoken,并算出gtku003Cu002Fpu003Eu003Cpu003Eimport reu003Cu002Fpu003Eu003Cpu003Efrom selenium import webdriveru003Cu002Fpu003Eu003Cpu003Efrom time import sleepu003Cu002Fpu003Eu003Cpu003Efrom PIL import Imageu003Cu002Fpu003Eu003Cpu003E#定义登录函数u003Cu002Fpu003Eu003Cpu003Edef QR_login():u003Cu002Fpu003Eu003Cpu003E def getGTK(cookie):u003Cu002Fpu003Eu003Cpu003E “”” 根据cookie得到GTK “””u003Cu002Fpu003Eu003Cpu003E hashes = 5381u003Cu002Fpu003Eu003Cpu003E for letter in cookie[‘p_skey’]:u003Cu002Fpu003Eu003Cpu003E hashes += (hashes << 5) + ord(letter)u003Cu002Fpu003Eu003Cpu003Ereturn hashes & 0x7fffffffu003Cu002Fpu003Eu003Cpu003E browser=webdriver.PhantomJS(executable_path=”D:\phantomjs.exe”)#这里要输入你的phantomjs所在的路径u003Cu002Fpu003Eu003Cpu003E url=”https:u002Fu002Fqzone.qq.comu002F”#QQ登录网址u003Cu002Fpu003Eu003Cpu003E browser.get(url)u003Cu002Fpu003Eu003Cpu003E browser.maximize_window()#全屏u003Cu002Fpu003Eu003Cpu003E sleep(3)#等三秒u003Cu002Fpu003Eu003Cpu003E browser.get_screenshot_as_file(‘QR.png’)#截屏并保存图片u003Cu002Fpu003Eu003Cpu003E im = Image.open(‘QR.png’)#打开图片u003Cu002Fpu003Eu003Cpu003E im.show()#用手机扫二维码登录qq空间u003Cu002Fpu003Eu003Cpu003E sleep(20)#等二十秒,可根据自己的网速和性能修改u003Cu002Fpu003Eu003Cpu003E print(browser.title)#打印网页标题u003Cu002Fpu003Eu003Cpu003E cookie = {}#初始化cookie字典u003Cu002Fpu003Eu003Cpu003E for elem in browser.get_cookies():#取cookiesu003Cu002Fpu003Eu003Cpu003E cookie[elem[‘name’]] = elem[‘value’]u003Cu002Fpu003Eu003Cpu003Eprint(‘Get the cookie of QQlogin successfully!(共%d个键值对)’ % (len(cookie)))u003Cu002Fpu003Eu003Cpu003E html = browser.page_source#保存网页源码u003Cu002Fpu003Eu003Cpu003E g_qzonetoken=re.search(r’window\.g_qzonetoken = \(function\(\)\{ try\{return (.*?);\} catch\(e\)’,html)#从网页源码中提取g_qzonetokenu003Cu002Fpu003Eu003Cpu003E gtk=getGTK(cookie)#通过getGTK函数计算gtku003Cu002Fpu003Eu003Cpu003E browser.quit()u003Cu002Fpu003Eu003Cpu003Ereturn (cookie,gtk,g_qzonetoken.group(1))u003Cu002Fpu003Eu003Cpu003Eif __name__==”__main__”:u003Cu002Fpu003Eu003Cpu003E QR_login()u003Cu002Fpu003Eu003Cpu003E通过Requests库利用前面得到的url参数,构造http请求u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002Fc651076a3d8b4c35a775651f2718e1ac” img_width=”600″ img_height=”158″ alt=”校花转学到我们班,于是我用Python把她空间给爬了个遍” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002Fcaf356d124534060b381e19cf50c1433″ img_width=”600″ img_height=”253″ alt=”校花转学到我们班,于是我用Python把她空间给爬了个遍” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E通过抓包分析可以找到上图这个请求,这个请求响应的是说说信息u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002F49de2e8e309041f1a74d7679c1cdbebb” img_width=”600″ img_height=”252″ alt=”校花转学到我们班,于是我用Python把她空间给爬了个遍” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E通过火狐浏览器的一个叫json-dataview的插件可以看到这个响应是一个json格式的,开心!u003Cu002Fpu003Eu003Cpu003E然后就是用正则表达式提取字段了,这个没什么意思,直接看我的代码吧u003Cu002Fpu003Eu003Cpreu003Edef parse_mood(i):u003Cbru003E ”’从返回的json中,提取我们想要的字段”’u003Cbru003E text = re.sub(‘”commentlist”:.*?”conlist”:’, ”, i)u003Cbru003Eif text:u003Cbru003E myMood = {}u003Cbru003E myMood[“isTransfered”] = Falseu003Cbru003E tid = re.findall(‘”t1_termtype”:.*?”tid”:”(.*?)”‘, text)[0] # 获取说说IDu003Cbru003E tid = qq + ‘_’ + tidu003Cbru003E myMood[‘id’] = tidu003Cbru003E myMood[‘pos_y’] = 0u003Cbru003E myMood[‘pos_x’] = 0u003Cbru003E mood_cont = re.findall(‘\],”content”:”(.*?)”‘, text)u003Cbru003Eif re.findall(‘},”name”:”(.*?)”,’, text):u003Cbru003E name = re.findall(‘},”name”:”(.*?)”,’, text)[0]u003Cbru003E myMood[‘name’] = nameu003Cbru003Eif len(mood_cont) == 2: # 如果长度为2则判断为属于转载u003Cbru003E myMood[“Mood_cont”] = “评语:” + mood_cont[0] + “———>转载内容:” + mood_cont[1] # 说说内容u003Cbru003E myMood[“isTransfered”] = Trueu003Cbru003E elif len(mood_cont) == 1:u003Cbru003E myMood[“Mood_cont”] = mood_cont[0]u003Cbru003Eelse:u003Cbru003E myMood[“Mood_cont”] = “”u003Cbru003E if re.findall(‘”created_time”:(\d+)’, text):u003Cbru003E created_time = re.findall(‘”created_time”:(\d+)’, text)[0]u003Cbru003E temp_pubTime = datetime.datetime.fromtimestamp(int(created_time))u003Cbru003E temp_pubTime = temp_pubTime.strftime(“%Y-%m-%d %H:%M:%S”)u003Cbru003E dt = temp_pubTime.split(‘ ‘)u003Cbru003E time = dt[1]u003Cbru003E myMood[‘time’] = timeu003Cbru003E date = dt[0]u003Cbru003E myMood[‘date’] = dateu003Cbru003Eif re.findall(‘”source_name”:”(.*?)”‘, text):u003Cbru003E source_name = re.findall(‘”source_name”:”(.*?)”‘, text)[0] # 获取发表的工具(如某手机)u003Cbru003E myMood[‘tool’] = source_nameu003Cbru003Eif re.findall(‘”pos_x”:”(.*?)”‘, text):#获取经纬度坐标u003Cbru003E pos_x = re.findall(‘”pos_x”:”(.*?)”‘, text)[0]u003Cbru003E pos_y = re.findall(‘”pos_y”:”(.*?)”‘, text)[0]u003Cbru003Eif pos_x:u003Cbru003E myMood[‘pos_x’] = pos_xu003Cbru003Eif pos_y:u003Cbru003E myMood[‘pos_y’] = pos_yu003Cbru003E idname = re.findall(‘”idname”:”(.*?)”‘, text)[0]u003Cbru003E myMood[‘idneme’] = idnameu003Cbru003E cmtnum = re.findall(‘”cmtnum”:(.*?),’, text)[0]u003Cbru003E myMood[‘cmtnum’] = cmtnumu003Cbru003Ereturn myMood#返回一个字典u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E我们想要的东西已经提取出来了,接下来需要设计数据表,通过navicat可以很方便的建表,然后通过python连接mysql数据库,写入数据。这是创建数据表的sql代码u003Cu002Fpu003Eu003Cpu003ECREATE TABLE mood (u003Cu002Fpu003Eu003Cpu003Ename varchar(80) DEFAULT NULL,u003Cu002Fpu003Eu003Cpu003Edate date DEFAULT NULL,u003Cu002Fpu003Eu003Cpu003Econtent text,u003Cu002Fpu003Eu003Cpu003Ecomments_num int(11) DEFAULT NULL,u003Cu002Fpu003Eu003Cpu003Etime time DEFAULT NULL,u003Cu002Fpu003Eu003Cpu003Etool varchar(255) DEFAULT NULL,u003Cu002Fpu003Eu003Cpu003Eid varchar(255) NOT NULL,u003Cu002Fpu003Eu003Cpu003Esitename varchar(255) DEFAULT NULL,u003Cu002Fpu003Eu003Cpu003Epox_x varchar(30) DEFAULT NULL,u003Cu002Fpu003Eu003Cpu003Epox_y varchar(30) DEFAULT NULL,u003Cu002Fpu003Eu003Cpu003EisTransfered double DEFAULT NULL,u003Cu002Fpu003Eu003Cpu003EPRIMARY KEY (id)u003Cu002Fpu003Eu003Cpu003E) ENGINE=InnoDB DEFAULT CHARSET=utf8;u003Cu002Fpu003Eu003Cpu003E其实到这里爬虫的主要的代码就算完了,之后主要是通过QQ邮箱的联系人导出功能,构建url列表,最后等着它运行完成就可以了。这里我单线程爬200多个好友用了大约三个小时,拿到了十万条说说。下面是爬虫的主体代码。u003Cu002Fpu003Eu003Cpu003E#从csv文件中取qq号,并保存在一个列表中u003Cu002Fpu003Eu003Cpu003Ecsv_reader = csv.reader(open(‘qq.csv’))u003Cu002Fpu003Eu003Cpu003Efriend=[]u003Cu002Fpu003Eu003Cpu003Efor row in csv_reader:u003Cu002Fpu003Eu003Cpu003E friend.append(row[3])u003Cu002Fpu003Eu003Cpu003Efriend.pop(0)u003Cu002Fpu003Eu003Cpu003Efriends=[]u003Cu002Fpu003Eu003Cpu003Efor f in friend:u003Cu002Fpu003Eu003Cpu003E f=f[:-7]u003Cu002Fpu003Eu003Cpu003E friends.append(f)u003Cu002Fpu003Eu003Cpu003Eheaders={u003Cu002Fpu003Eu003Cpu003E’Host’: ‘h5.qzone.qq.com’,u003Cu002Fpu003Eu003Cpu003E ‘User-Agent’: ‘Mozillau002F5.0 (Windows NT 6.1; WOW64; rv:53.0) Geckou002F20100101 Firefoxu002F53.0’,u003Cu002Fpu003Eu003Cpu003E ‘Accept’: ‘*u002F*’,u003Cu002Fpu003Eu003Cpu003E ‘Accept-Language’:’zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3′,u003Cu002Fpu003Eu003Cpu003E ‘Accept-Encoding’: ‘gzip, deflate, br’,u003Cu002Fpu003Eu003Cpu003E ‘Referer’: ‘https:u002Fu002Fuser.qzone.qq.comu002F790178228?_t_=0.22746974226377736’,u003Cu002Fpu003Eu003Cpu003E ‘Connection’:’keep-alive’u003Cu002Fpu003Eu003Cpu003E}#伪造浏览器头u003Cu002Fpu003Eu003Cpu003Econn = MySQLdb.connect(‘localhost’, ‘root’, ‘123456’, ‘qq_mood’, charset=”utf8″, use_unicode=True)#连接mysql数据库u003Cu002Fpu003Eu003Cpu003Ecursor = conn.cursor()#定义游标u003Cu002Fpu003Eu003Cpu003Ecookie,gtk,qzonetoken=QRlogin#通过登录函数取得cookies,gtk,qzonetokenu003Cu002Fpu003Eu003Cpu003Es=requests.session()#用requests初始化会话u003Cu002Fpu003Eu003Cpu003Efor qq in friends:#遍历qq号列表u003Cu002Fpu003Eu003Cpu003E for p in range(0,1000):u003Cu002Fpu003Eu003Cpu003E pos=p*20u003Cu002Fpu003Eu003Cpu003E params={u003Cu002Fpu003Eu003Cpu003E’uin’:qq,u003Cu002Fpu003Eu003Cpu003E ‘ftype’:’0′,u003Cu002Fpu003Eu003Cpu003E ‘sort’:’0′,u003Cu002Fpu003Eu003Cpu003E ‘pos’:pos,u003Cu002Fpu003Eu003Cpu003E ‘num’:’20’,u003Cu002Fpu003Eu003Cpu003E ‘replynum’:’100′,u003Cu002Fpu003Eu003Cpu003E ‘g_tk’:gtk,u003Cu002Fpu003Eu003Cpu003E ‘callback’:’_preloadCallback’,u003Cu002Fpu003Eu003Cpu003E ‘code_version’:’1′,u003Cu002Fpu003Eu003Cpu003E ‘format’:’jsonp’,u003Cu002Fpu003Eu003Cpu003E ‘need_private_comment’:’1′,u003Cu002Fpu003Eu003Cpu003E ‘qzonetoken’:qzonetokenu003Cu002Fpu003Eu003Cpu003E }u003Cu002Fpu003Eu003Cpu003E response=s.request(‘GET’,’https:u002Fu002Fh5.qzone.qq.comu002Fproxyu002Fdomainu002Ftaotao.qq.comu002Fcgi-binu002Femotion_cgi_msglist_v6′,params=params,headers=headers,cookies=cookie)u003Cu002Fpu003Eu003Cpu003Eprint(response.status_code)#通过打印状态码判断是否请求成功u003Cu002Fpu003Eu003Cpu003E text=response.text#读取响应内容u003Cu002Fpu003Eu003Cpu003E if not re.search(‘lbs’, text):#通过lbs判断此qq的说说是否爬取完毕u003Cu002Fpu003Eu003Cpu003E print(‘%s说说下载完成’% qq)u003Cu002Fpu003Eu003Cpu003Ebreaku003Cu002Fpu003Eu003Cpu003E textlist = re.split(‘\{“certified”‘, text)[1:]u003Cu002Fpu003Eu003Cpu003Efor i in textlist:u003Cu002Fpu003Eu003Cpu003E myMood=parse_mood(i)u003Cu002Fpu003Eu003Cpu003E”’将提取的字段值插入mysql数据库,通过用异常处理防止个别的小bug中断爬虫,开始的时候可以先不用异常处理判断是否能正常插入数据库”’u003Cu002Fpu003Eu003Cpu003E try:u003Cu002Fpu003Eu003Cpu003E insert_sql = ”’u003Cu002Fpu003Eu003Cpu003E insert into mood(id,content,time,sitename,pox_x,pox_y,tool,comments_num,date,isTransfered,name)u003Cu002Fpu003Eu003Cpu003E VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)u003Cu002Fpu003Eu003Cpu003E ”’u003Cu002Fpu003Eu003Cpu003E cursor.execute(insert_sql, (myMood[‘id’],myMood[“Mood_cont”],myMood[‘time’],myMood[‘idneme’],myMood[‘pos_x’],myMood[‘pos_y’],myMood[‘tool’],myMood[‘cmtnum’],myMood[‘date’],myMood[“isTransfered”],myMood[‘name’]))u003Cu002Fpu003Eu003Cpu003E conn.commit()u003Cu002Fpu003Eu003Cpu003Eexcept:u003Cu002Fpu003Eu003Cpu003E passu003Cu002Fpu003Eu003Cpu003Eprint(‘说说全部下载完成!’)u003Cu002Fpu003Eu003Cpu003E下面是爬取的数据,有100878条!(没想到居然有这么多)u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002F58f88dbebebf4d22901dd2c27277b802″ img_width=”600″ img_height=”449″ alt=”校花转学到我们班,于是我用Python把她空间给爬了个遍” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E拿到数据后,我先用sql进行聚合分析,然后通过ipython作图,将数据可视化。u003Cu002Fpu003Eu003Cpu003E统计一年之中每天的说说数目,可以发现每年除夕这一天是大家发说说最多的一天(统计了2013到2017年)u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002F51c55efb74d64851953b64b6ba1fb548″ img_width=”600″ img_height=”459″ alt=”校花转学到我们班,于是我用Python把她空间给爬了个遍” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E通过两个辅助表,可以看到分年,分月,分小时段统计的说说数目,下面是代码和数据图u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002F79149e831f934ca4955b05ea88d03b94″ img_width=”600″ img_height=”406″ alt=”校花转学到我们班,于是我用Python把她空间给爬了个遍” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E其余的几个图代码都是类似的,我就不重复发了。(其实主要是cmd里面复制代码太不方便了,建议大家用ipython notebook)u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002F7ee6aada243549dc816eb6fde3d0aee4″ img_width=”600″ img_height=”450″ alt=”校花转学到我们班,于是我用Python把她空间给爬了个遍” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E额,可以看出2014年9月达到了一个高峰,主要是因为我的朋友大都是是2014年九月大学入学的,之后开始下降,这可能是好多人开始玩微信,逐渐放弃了QQ,通过下面这个年变化图可以更直观的看出u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002F90c4f4e728544ac9b33603f8601dfd17″ img_width=”600″ img_height=”450″ alt=”校花转学到我们班,于是我用Python把她空间给爬了个遍” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002Fbe721f01a7a44284ac8a6b582e758a61″ img_width=”600″ img_height=”450″ alt=”校花转学到我们班,于是我用Python把她空间给爬了个遍” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E通过这个每小时段说说发表的数目柱形图,可以发现大家在晚上22点到23点左右是最多的,另外中午十二点到一点也有一个小高峰u003Cu002Fpu003Eu003Cpu003Etool发表说说用的工具这个字段的数据比较脏,因为发表工具可以由用户自定义。最后我用Excel的内容筛选功能,做了一个手机类型的饼图u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002F178b555d2d2f4b4db700ba1f5b5116c5″ img_width=”600″ img_height=”385″ alt=”校花转学到我们班,于是我用Python把她空间给爬了个遍” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E通过这个饼图可以看出使用最多的手机是苹果,小米,魅族,华为这四个手机品牌。(这个结果有很大的因素是因为我的好友大多数学生党,偏向于性价比高的手机)u003Cu002Fpu003Eu003Cpu003E还有一个比较好玩的就是把经纬度信息导出来,通过智图GeoQ | 位置智能平台可以生成一个地图,这个地图的效果还是非常好的(2000条数据免费,本来有位置信息的说说有3500条,剔除了国外的坐标后我从中随机选了2000条)u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002F69ff8df8791e4baa95854ff46adfa72c” img_width=”600″ img_height=”421″ alt=”校花转学到我们班,于是我用Python把她空间给爬了个遍” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E因为涉及到个人隐私问题,这个地图的链接就不分享了。u003Cu002Fpu003Eu003Cpu003E最后,通过将mood表中的content字段导出为txt文本文件,利用python的jieba和wordcloud这两个第三方库,可以生成基于说说内容的词云。下面是代码u003Cu002Fpu003Eu003Cpreu003E#coding:utf-8u003Cbru003Eimport matplotlib.pyplot as pltu003Cbru003Efrom wordcloud import WordCloud,ImageColorGenerator,STOPWORDSu003Cbru003Eimport jiebau003Cbru003Eimport numpy as npu003Cbru003Efrom PIL import Imageu003Cbru003E#读入背景图片u003Cbru003Eabel_mask = np.array(Image.open(“qq.jpg”))u003Cbru003E#读取要生成词云的文件u003Cbru003Etext_from_file_with_apath = open(‘mood.txt’,encoding=’utf-8′).read()u003Cbru003E#通过jieba分词进行分词并通过空格分隔u003Cbru003Ewordlist_after_jieba = jieba.cut(text_from_file_with_apath, cut_all = True)u003Cbru003Estopwords = {‘转载’,’内容’,’em’,’评语’,’uin’,’nick’}u003Cbru003Eseg_list = [i for i in wordlist_after_jieba if i not in stopwords]u003Cbru003Ewl_space_split = ” “.join(seg_list)u003Cbru003E#my_wordcloud = WordCloud().generate(wl_space_split) 默认构造函数u003Cbru003Emy_wordcloud = WordCloud(u003Cbru003Ebackground_color=’black’, # 设置背景颜色u003Cbru003E mask = abel_mask, # 设置背景图片u003Cbru003E max_words = 250, # 设置最大现实的字数u003Cbru003E stopwords = STOPWORDS, # 设置停用词u003Cbru003E font_path = ‘C:u002FWindowsu002Ffontsu002Fsimkai.ttf’,# 设置字体格式,如不设置显示不了中文u003Cbru003E max_font_size = 42, # 设置字体最大值u003Cbru003E random_state = 40, # 设置有多少种随机生成状态,即有多少种配色方案u003Cbru003E scale=1.5,u003Cbru003E mode=’RGBA’,u003Cbru003E relative_scaling=0.6u003Cbru003E ).generate(wl_space_split)u003Cbru003E# 根据图片生成词云颜色u003Cbru003E#image_colors = ImageColorGenerator(abel_mask)u003Cbru003E#my_wordcloud.recolor(color_func=image_colors)u003Cbru003E# 以下代码显示图片u003Cbru003Eplt.imshow(my_wordcloud)u003Cbru003Eplt.axis(“off”)u003Cbru003Eplt.show()u003Cbru003Emy_wordcloud.to_file(“cloud.jpg”)u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E下面是效果图u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp9.pstatp.comu002Flargeu002Fpgc-imageu002F0308a5c08fd94083b7de4ed39f487731″ img_width=”600″ img_height=”424″ alt=”校花转学到我们班,于是我用Python把她空间给爬了个遍” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E最后,小编想说:我是一名python开发工程师,整理了一套最新的python系统学习教程,想要这些资料的可以关注私信小编“01”即可,希望能对你有所帮助u003Cu002Fpu003Eu003Cu002Fdivu003E”

原文始发于:校花转学到我们班,于是我用Python把她空间给爬了个遍

主题测试文章,只做测试使用。发布者:熱鬧獨處,转转请注明出处:http://www.cxybcw.com/18115.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code