[{"data":1,"prerenderedAt":63},["ShallowReactive",2],{"article-36":3},{"code":4,"msg":5,"data":6,"count":14},200,"查询成功",{"id":7,"title":8,"keywords":9,"description":10,"category_id":11,"content":12,"body_html":13,"thumb_up":14,"clicks":15,"sort":14,"remark":16,"status":17,"is_open":17,"is_deleted":14,"is_top":14,"is_recommend":14,"create_time":18,"update_time":19,"image_id":20,"url":13,"member_id":14,"cate_name":21,"prev":22,"next":25,"tags":28,"words":34,"read_time":35,"comments":14,"cover":36,"relevant":37},36,"Python分析一波微信好友","python,微信,爬虫,itchat","将使用itchat抓取微信数据，并对获取到的数据进行全面分析，包含好友性别、地理位置分布、个性签名等进行分析，分析到你怀疑人生。找到为什么单身的原因。",5,"将使用itchat抓取微信数据，并对获取到的数据进行全面分析，包含好友性别、地理位置分布、个性签名等进行分析，分析到你怀疑人生。找到为什么单身的原因。\n\n##### 一、itchat简单介绍\n\n本文章用的主角库就是itchat。\n\nitchat是一个开源的微信个人号接口，使用python调用微信从未如此简单。使用不到三十行的代码，你就可以完成一个能够处理所有信息的微信机器人。\n\n本文章使用itchat分析一波微信好友\n\n安装\n\n```python\npip install itchat\n```\n\n基本的是使用方法本文章就不做介绍了，itchat的使用不是文章的主要内容。\n\n正题开始\n\n##### 二、目的\n\nitchat抓取微信数据，并进行数据分析，数据可视化显示。\n\n##### 三、获取数据\n\n使用itchat中的 get_friends 方法获取微信所有好友数据\n\n```python\ndef get_friends():\n    '''\n   获取数据\n    '''\n    itchat.auto_login()\n    friends = itchat.get_friends(update=True)\n    return friends\n```\n##### 四、处理数据\n\n处理获取到的数据，提前有用的数据\n\n```python\ndef parse_data(data):\n    '''\n    提取有用的数据\n    该方法获取好友基本信息，且保存好友头像\n    '''\n    friends = []\n    base_path = '.\u002FheadImages'\n    if not os.path.exists(base_path):\n       os.mkdir(base_path)\n\n    for item in data:\n        img_data = itchat.get_head_img(userName=item['UserName'])\n        \n        img_name = item['RemarkName'] if item['RemarkName'] != '' else item['NickName']\n        img_name = re.sub(\"[\\!\\%\\[\\]\\,\\。\\(\\*\\-\\☻\\*\\)]\", \"\", img_name)#剔除特殊字符 防止路径os报错\n        img_file = os.path.join(base_path, img_name+'.jpg')\n        print(img_file)\n        with open(img_file, 'wb') as f:\n            f.write(img_data)\n\n        friend = {\n            'NickName': item['NickName'],\n            'RemarkName': item['RemarkName'],\n            'Sex': item['Sex'],\n            'Province': item['Province'],\n            'City': item['City'],\n            'Signature':item['Signature'].replace('\\n',' ').replace(',', ' '),\n            'StarFriend': item['StarFriend'],\n            'ContactFlag': item['ContactFlag']\n        }\n        print(friend)\n        friends.append(friend)\n    return friends\n```\n##### 五、保存数据\n\n将提取的到的数据保存成json文件，方便后面数据分析使用。\n\n```python\ndef write_data(param):\n    '''\n    将数据写入文件中\n    '''\n    with open('.\u002Fwx_friends.json', 'w', encoding='utf-8') as f:\n        try:\n            job_json = json.dumps(param, indent=4, ensure_ascii=False)\n            f.write(job_json )\n        except Exception as e:\n            print('-----')\n            print(e)\n            pass\n```\n##### 六、分析数据，数据可视化\n\n使用pyechart分析微信好友数据。\n\npyechart安装\n\n```python\npip install pyecharts\n```\n1、好友性别比例分析\n\n```python\ndef friends_sex(data):\n    '''\n    好友性别比列分析\n    '''\n    attr = ['male', 'woman', 'other']\n\n    male = 0\n    woman =0\n    unknown = 0\n    for item in data:\n        if item['Sex'] == 0:\n            unknown += 1\n        elif item['Sex'] == 1:\n            male += 1\n        else:\n            woman += 1\n    value = [male, woman, unknown]\n\n    pie = Pie(\n        '好友性格比例',\n        '好友总人数：%d'%len(data),\n        title_pos ='center'\n    )\n    pie.add(\n        '',\n        attr,\n        value,\n        radius=[30,75],\n        rosetype='area',\n        is_label_show=True,\n        is_legend_show=True,\n        legend_top='bottom'\n    )\n    pie.render('好友性别比例.html')\n```\n\n2、好友位置分布\n\n```python\ndef friends_address(data):\n    cities = []\n    for item in data:\n        if item['City'] != '':\n            cities.append(item['City'])\n    data = Counter(cities).most_common()\n    print(data)\n    geo = Geo(\n        '好友位置分布',\n        '',\n        title_color=\"#fff\",\n        title_pos=\"center\",\n        width=1200,\n        height=600,\n        background_color=\"#404a59\",\n    )\n    attr, value = geo.cast(data)\n    geo.add(\n        \"\",\n        attr,\n        value,\n        visual_range=[0, 200],\n        maptype='china',\n        visual_text_color=\"#fff\",\n        symbol_size=15,\n        is_visualmap=True,\n    )\n    geo.render('好友位置分布.html')\n```\n\n3、个人签名词云\n\n```python\ndef signature_cloud(data):\n    '''\n    个人签名词云\n    '''\n    signature = []\n    for item in data:\n        if item['Signature'] != '':\n            signature.append(item['Signature'])\n    print(signature)\n    data = jieba.cut(str(signature), cut_all=False)\n    words = ' '.join(data)\n    print(words)\n    stopwords = STOPWORDS.copy()\n    stopwords.add('span')\n    stopwords.add('class')\n    stopwords.add('emoji')\n    stopwords.add('emoji1f42c')\n    stopwords.add('emoji1f388')\n    stopwords.add('emoji1f525')\n    stopwords.add('emoji1f33c')\n    stopwords.add('emoji1f483')\n    stopwords.add('emoji2764')\n\n    mask = np.array(Image.open('.\u002Flove.png'))\n    wc = WordCloud(\n        width=1024,\n        height=768,\n        background_color='#fff',\n        mask=mask,\n        font_path='C:\\Windows\\Fonts\\AdobeFangsongStd-Regular.otf',\n        stopwords=stopwords,\n        max_font_size=400,\n        random_state=50\n    )\n    wc.generate_from_text(words)\n    # 保存结果到本地\n    wc.to_file('个性签名词云图.jpg')\n```\n",null,0,495,"",1,"2019-02-18 21:42:48","2026-04-19 15:16:11",133,"Python",{"id":23,"title":24},35,"xpath爬去boss直聘职位信息",{"id":26,"title":27},37,"干货分享！！！Yii1封装Cookie操作",[29,31],{"id":30,"name":21},27,{"id":32,"name":33},51,"爬虫",2451,6,"https:\u002F\u002Ftp.myong.top\u002Fstorage\u002Farticle\u002Fbe\u002F7eb81eb8c1826e0eb5671b64818cf3.jpg",[38,43,48,53,58],{"id":39,"title":40,"create_time":41,"description":42},95,"Django启用memcache缓存","2020-10-23 11:17:27","在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面.当一个网站的用户访问量很大的时候,每一次的的后台操作,都会消耗很多的服务端资源,所以必须使用缓存来减轻后端服务器的压力.",{"id":44,"title":45,"create_time":46,"description":47},91,"用Python实现编程语言 20 年的动态排行榜","2020-06-24 16:06:54","爬取一下，自2001年5月至今，TIOBE 编程语言排行榜上编程语言的变化情况，看一下在接近20年的时间里，编程语言的热度是如何变化的。\r\n",{"id":49,"title":50,"create_time":51,"description":52},100,"re正则表达式","2021-07-10 18:09:52","正则表达式是一个特殊的字符序列，它能帮助你方便的检查一个字符串是否与某种模式匹配，本文罗列re正则表达式中，常用的匹配符号。",{"id":54,"title":55,"create_time":56,"description":57},34,"Python基础整理之列表常见操作","2019-02-10 16:53:55","列表是最常用的Python数据类型，它可以作为一个方括号内的逗号分隔值出现。列表的数据项不需要具有相同的类型",{"id":59,"title":60,"create_time":61,"description":62},63,"Python与mysqldump的数据库备份","2019-10-14 15:35:33","mysqldump是备份MySQL数据库的一种好工具。它相对于用phpmyadmin等备份工具更加快速，又避免受php.ini等的限制，在windows系统下还可以结合计划任务实现定时远程备份数据库",1783431667645]