乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      微信大揭秘——用Python玩轉(zhuǎn)微信(一)

       空谷天籟 2018-01-20

          有讀者叫樹根有空就要多更新公眾號,樹根也在想要不要轉(zhuǎn)型,畢竟最近在自學Python。但是不管怎么樣,我都想把自己學到的覺得最有意思的,用自己的方式去呈現(xiàn)給大家看。

          今天想給大家的文文是關(guān)于怎么用Python爬一爬自己的微信,本文是這個系列的第一篇。因為Python關(guān)于微信的工具庫itchat有很多好玩的功能,比如自動回復和查看撤回消息等等,其他功能樹根會慢慢摸索,在日后會繼續(xù)教大家怎么用Python玩轉(zhuǎn)微信。

          樹根會以自己的微信作為白老鼠,來展示給大家看。想自己動手試試的讀者也可以自己用Python試試。


         ”itchat“是由@LittleCoder開發(fā)的,當然Python關(guān)于微信的庫有很多,只是”itchat“較為簡單和方便。接下來的文章內(nèi)容都是基于這個庫。


          接下來,就是樹根微信大揭秘時間了


          樹根已經(jīng)默認大家安裝好Python了,還沒安裝的請看上一篇文文《回憶or寄望,制作一份屬于自己的云圖詞》。所有第一步肯定就是工具庫的安裝。打開cmd命令窗口,或者Anaconda Prompt,依次輸入以下命令安裝相關(guān)的工具庫:


      pip install itchat
      pip install pyecharts


           然后我們在Python中導入所需的工具庫:


      #微信工具庫
      import itchat
      #畫圖的庫,Bar柱狀圖,Pie餅圖,Map地圖

      from pyecharts import Pie,Map,Bar
      #數(shù)據(jù)庫

      import pymysql 


           然后我們可以執(zhí)行以下代碼登錄微信以及檢驗是否登錄成功:


      itchat.login()#生成二維碼,掃描登錄微信

      itchat.send('樹根雖然長得丑,但是很溫柔','filehelper') 


          執(zhí)行代碼以后會生成一個二維碼,用手機微信掃描以后就可以登錄微信了。然后第二行代碼是發(fā)送“'樹根雖然長得丑,但是很溫柔'”到文件傳輸助手,那個“filehelper”就是文件傳輸助手。

          我們來看看是否成功:

          

          太好了,看到這里就證明是成功了,可以進行接下來的事(什么,說我瞎說什么大實話???)。

          統(tǒng)計微信男女好友比例并可視化

          要統(tǒng)計微信好友的男女比例,首先當然要獲取所有微信好友的數(shù)據(jù),itchat提供了get_friends這個方法來獲取好友的所有信息,我們直接看代碼:


      #保持登錄
      itchat.auto_login(hotReload=True)

      itchat.dump_login_status()
      #獲取好友信息

      friends = itchat.get_friends(update=True)[:]
      #總好友數(shù),減去自己

      total = len(friends)-1
      #爬取的各個參數(shù)

      result=[('RemarkName','備注'),('NickName','微信昵稱'),

              ('Sex','性別'),('City','城市'),('Province','省份'),

              ('UserName','用戶名'),('Signature','個性簽名')]

      every = []

      for user in friends:

          everys = {}

          everys['remarkname'] = user.get('RemarkName')

          everys['city'] = user.get('City')

          everys['nickName'] = user.get('NickName')

          everys['sex'] = user.get('Sex')

          everys['province'] = user.get('Province')

          everys['userName'] = user.get('UserName')

          everys['signature'] = user.get('Signature')

          every.append(everys)

      for we in every:

          remarkname = we['remarkname']

          city = we['city']

          nickName = we['nickName']

          sex = we['sex']

          province = we['province']

          userName = we['userName']

          signature = we['signature']

          connection = pymysql.connect(

                  host='192.168.31.40',  # 連接的是本地數(shù)據(jù)庫,你自己的IP

                  user='acer',        # mysql用戶名,自行輸入

                  passwd='*****',  # 密碼,自行輸入

                  db='*****',      # 數(shù)據(jù)庫的名字

                  charset='utf8mb4',     # 默認的編碼方式:

                  cursorclass=pymysql.cursors.DictCursor)

          

          with connection.cursor() as cursor:

              # 創(chuàng)建更新值的sql語句

              sql = 'INSERT INTO wechat(remarkname,nickName,userName,sex,province,city,signature) VALUES (%s,%s,%s,%s,%s,%s,%s)'

              cursor.execute(sql,(remarkname,nickName,userName,sex,province,city,signature))

              

              # 提交本次插入的記錄

              connection.commit()   

          connection.close()

      print ('完成')


          我們來看一下是否爬取成功:

          以下是Python變量區(qū)的friends變量:


      來對比一下樹根的微信好友個數(shù):

          

          太好了,看到這里就證明又是成功了。


      我們來執(zhí)行以下代碼print一下男女比例結(jié)果:


       

      male = female = other = 0

      for i in friends[1:]:

          sex = i['Sex']

          if sex == 1:

              male += 1

          elif sex == 2:

              female += 1

          else:

              other +=1


      #計算朋友總數(shù)

      total = len(friends[1:])

      print('男性好友: %.2f%%' % (float(male)/total*100) + '\n' +

      '女性好友: %.2f%%' % (float(female) / total * 100) + '\n' +

      '不明性別好友: %.2f%%' % (float(other) / total * 100))


          輸出結(jié)果為:

          可視化呈現(xiàn):


      pie = Pie('震驚!原來樹根的微信好友是這樣的')

      pie.add(' ',['男' ,'女','外星人'],[(float(male)/total*100),(float(female) / total * 100),(float(other) / total * 100)])

      pie.render()

      bar = Bar('震驚!原來樹根的微信好友是這樣的')

      bar.add(' ',['男' ,'女','外星人'],[(float(male)/total*100),(float(female) / total * 100),(float(other) / total * 100)])

      bar.render()


          

          執(zhí)行以上代碼會在默認文件路徑生成名為render的html文件,打開即可得可視化結(jié)果:

              

          還可以是柱狀圖:

          啊,一不小心就暴露了自己女性朋友比較多的事實。。。


          再仔細觀察friends列表,發(fā)現(xiàn)里面還包含了好友昵稱、省份、城市、個人簡介等等的數(shù)據(jù),剛好可以用來分析好友城市分布,最好的方式是定義一個函數(shù)把數(shù)據(jù)都爬下來,存到數(shù)據(jù)框里,再進行分析。


          因此我們可以執(zhí)行以下代碼把數(shù)據(jù)導出到excel:


      #定義一個函數(shù),用來爬取各個變量

      def get_var(var):

          variable = []

          for i in friends:

              value = i[var]

              variable.append(value)

          return variable


      #調(diào)用函數(shù)得到各變量,并把數(shù)據(jù)存到csv文件中,保存到桌面

      NickName = get_var('NickName')

      Sex = get_var('Sex')

      Province = get_var('Province')

      City = get_var('City')

      Signature = get_var('Signature')


      from pandas import DataFrame

      data = {'NickName': NickName, 'Sex': Sex, 'Province': Province,

              'City': City, 'Signature': Signature}

      frame = DataFrame(data)

      frame.to_csv('C:/Users/acer/Desktop/data.csv', index=True)


          執(zhí)行以后發(fā)現(xiàn)桌面多了一個csv格式的文件,打開發(fā)現(xiàn)里面就是friends中的數(shù)據(jù):

         

           導出成功!

      統(tǒng)計微信好友來自哪里


          用excel進行對廣東的好友進行預處理和統(tǒng)計以后(樹根差點也想把MATLAB也用上),導入回Python,執(zhí)行以下代碼:


      import pyecharts as p

      #這些數(shù)據(jù)是經(jīng)過excel處理的

      city_name = ['朝陽市', '潮州市', '東莞市', '佛山市', '廣州市', '河源市',

             '惠州市', '汕頭市', '江門市', '揭陽市','茂名市','梅州市',

            '清遠市', '汕頭市','汕尾市', '韶關(guān)市', '深圳市', '肇慶市',

            '湛江市', '云浮市', '中山市', '珠海市']

      num = [2,9,27,24,86,3,7,10,22,30,9,9,5,22,2,1,7,44,13,14,

            5,2]


      cc = p.Map('樹根的微信好友分布(僅廣東)',width=1200,height=600)

      cc.add('',city_name,num,maptype='廣東',is_visualmap=True,visual_text_color='#000')

      cc.render()


          同樣我們在默認的路徑打開render的html文件,即可得可視化結(jié)果:

          發(fā)現(xiàn)樹根的好友來自廣州的最多,有86個,其次就是肇慶的好友,44個,第三就是揭陽和潮州的好友,分別是30和27,由上面的可視化結(jié)果也可以大致看出(好友分布人數(shù)對應左下角的顏色條)。

      微信好友個性簽名的自定義詞云圖


          好玩的來了。之前已經(jīng)爬下了每個好友的個性簽名,剛好可以分析一下大伙兒個性簽名時使用的高頻詞語是什么,用上上一篇文文的代碼(回憶or寄望,制作一份屬于自己的云圖詞)順便可以做個詞云圖。

          先把原先爬下來的個性簽名(Signature)打印出來,發(fā)現(xiàn)有很多本來是表情的,變成了emoji、span、class等等這些無關(guān)緊要的詞,需要先替換掉,另外,還有類似<>/= 之類的符號,也需要寫個簡單的正則替換掉,再把所有拼起來,得到text字串。

          以下是執(zhí)行代碼:


      import re

      siglist = []

      for i in friends:

          signature = i['Signature'].strip().replace('span','').replace('class','').replace('emoji','')

          rep = re.compile('1f\d+\w*|[<>/=]')

          signature = rep.sub('', signature)

          siglist.append(signature)

      text = ''.join(siglist)



          接著就可以把JB,啊不,把結(jié)巴分詞這個包搞進來分詞(搞不懂這個庫的名字怎么來的)。



      import jieba

      wordlist = jieba.cut(text, cut_all=True)

      word_space_split = ' '.join(wordlist)


          分詞成功以后,終于可以進入畫圖階段了??梢愿鶕?jù)自己想要的圖片、形狀、顏色畫出相似的圖形。樹根這次執(zhí)行的云圖詞代碼比上一篇的入門要高大上一點,我們需要把matplotlib、wordcloud、numpy、PIL等包搞進來:


      import matplotlib.pyplot as plt

      from wordcloud import WordCloud, ImageColorGenerator

      import numpy as np

      import PIL.Image as Image

      coloring = np.array(Image.open('C:/Users/acer/Desktop/timg.jpg'))

      my_wordcloud = WordCloud(background_color='white', max_words=2000,

                               mask=coloring, max_font_size=40, random_state=42, scale=2,

                               font_path='C:/Users/acer/Desktop/msyh.ttc').generate(word_space_split)


      image_colors = ImageColorGenerator(coloring)

      plt.imshow(my_wordcloud.recolor(color_func=image_colors))

      plt.imshow(my_wordcloud)

      plt.axis('off')

      plt.show()


          我們來看看結(jié)果是怎么樣的:

          能猜到是什么動物嗎?沒錯就是皮卡丘!(什么你居然說看不出???)

      以下是原圖:


          看來,在我的微信好友的個人簽名里,有人善于聆聽,有人強調(diào)善良,有人重視靈魂,有人凝視人生。一直在等待,不放棄尋找。歷盡曲折,不畏虛偽。真心如一,不能辜負。一步一生多努力,一起一切one more dream(樹根真編不下去了,其實樹根的好友簽名無非就是我不能沒有你你不能失去我哈哈哈哈)。

          

      最后

          以上是不是很有趣呢?是不是又打開了一扇新世界的大門呢?

          我微信好友也不是太多,如果微信好友有幾千個,可以得到幾千條數(shù)據(jù),分析一下還是很有價值的。

        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多