??斗地主捕鱼电竞提现秒到 广告位招租 - 15元/月全站展示
??支付宝搜索579087183领大额红包 ??伍彩集团官网直营彩票
??好待遇→招代理 ??伍彩集团官网直营彩票
??络茄网 广告位招租 - 15元/月全站展示
python 获取搜狗输入法里面所有的表情图片

转载   哈士奇1234   2018-11-15   浏览量:17


  1. 首先我们要使用fiddler爬取搜狗输入法表情接口,打开搜狗输入法键盘,里面有个表情,点击进去会进去搜狗的图片表情 ,其中有个输入框,我们要抓取的就是输入对应的文字,找到搜狗所有的管理按图片; 比如我输入的是
    "哈士奇",会出现
    python 获取搜狗输入法里面所有的表情图片
    其中的接口参数,我直接提供大家,大家可以按照这个接口格式进行获取图片

     //config.pinyin.sogou.com/picface/interface/query_zb.php?cands=5ZOI5aOr5aWH&tp=0&page=1&h=D9BB9D40B88283286D79B44EB3849EBE&v=8.9.0.2180&r=0000_sogoupinyin_8.9c&pv=6.1.7601&sdk=1.1.0.1819
     其中只有参数 cands 以及 page 是变化的,cands是要搜索的条件即我们输入的"哈士奇",page是获取的页数
     显然输入的中文进行了编码,这就是 base64编码,但是经过 python base64 编码得到的是5ZOI5aOr5aWH,而
     我抓取接口参数是5zoi5AoR5Awh ??赡芫褪谴笮⌒吹脑?,但是我替换我生成的5ZOI5aOr5aWH参数,接口
     没有返回参数,反而5zoi5AoR5Awh 就返回了参数。。。。。

2.难点介绍

 1.cands 是base64 加密后的字符串,但是需要使用 python里面字符串函数 swapcase()  ,这个函数的意思是
 字符串内大写字符转化小写,而小写字母转化大写 , 即搜狗接口参数需要在我们进行base64加密之后进行
     转化,接口才可通
     2.解析图片,一般搜狗返回的是 图片url,比如 
     https://emoi-cncdn.bing.com/emotionimage/chat/b6be53fab273d5742de330b29e9f3a93.jpg,  这种我们自然
     可以获取二进制和图片后缀, 但是搜狗也会返回
     //i03picsos.sogoucdn.com/3057c3f30647ee17 ,这种有二进制,但是不知道图片后缀

3.代码解释

     # -*- coding: UTF-8 -*-
     import base64
     import sys,requests,json,os,re

         #保存图片
    def save_img(content,path,name):
                    isExists=os.path.exists(path)
                    if not isExists:
                            os.makedirs(path) 
                    i_path = path+'\\'+name
                    with open(i_path,'ab') as f:    
                            f.write(content)     

                                    #获取接口的json数据
    def sougou_face(keyword,page):
        #搜狗的base64 加密,得到字符串需要转化 ,接口才可以使用
        serach_word = base64.b64encode(keyword)
        serach_word = serach_word.swapcase()     # 实现 大写转化小写,小写转化大写
        url_send = '//config.pinyin.sogou.com/picface/interface/query_zb.php'
        params = 'tp=0&page='+str(page)+'&h=D9BB9D40B88283286D79B44EB3849EBE&v=8.9.0.2180&r=0000_sogoupinyin_8.9c&pv=6.1.7601&sdk=1.1.0.1819';
        url_send = url_send+'?cands='+serach_word+'&'+params
        head={"Content-Type":"application/json;charset=utf-8"}
        response = requests.get(url_send,headers=head)
        return response.content

        #解析图片
    #//i03picsos.sogoucdn.com/3057c3f30647ee17  可能存在这种图片
    def list_img(sogou_data):
        json_data = json.loads(sogou_data)
        if(json_data['imglist']):
            for k in json_data['imglist']:
                img_id = k['id']   #图片唯一标识
                img_type = k['url'][-3:]
                img_list = ['jpg','gif','png']
                #不带后缀时候  可以直接赋值后缀
                if img_type not in img_list:
                    img_type = 'jpg'
                response = requests.get(k['url']).content
                path = 'D:\\python\\study\\splider\\mask\\img\\'+k['keywords']
                save_img(response,path,img_id+'.'+img_type) 
        else:
                print u'未找到图片,停止程序' 
                exit()

   sogou_data = sougou_face('哈士奇',1)
    list_img(sogou_data)
    exit()

    #====================== 代码解释 =====================

    1.sogou_data = sougou_face('哈士奇',1)  
    搜索关键词为哈士奇,即接口参数中的 cands,1 代表搜索第一页,其中函数返回的是二进制
    2.list_img(sogou_data) 
    根据二进制生成对应的图片 ,在函数 list_img 里面
             img_id = k['id']   #图片唯一标识
                img_type = k['url'][-3:]
                img_list = ['jpg','gif','png']
                #不带后缀时候  可以直接赋值后缀
                if img_type not in img_list:
                    img_type = 'jpg'
     就是上面所说的,返回如果没有图片后缀的话,我们自动给图片后缀为jpg,保存路径可自动更改
     3.如果爬虫的同学,可以修改代码里面的 sougou_face('哈士奇',1)  ,即修改参数页数,sougou_face('哈士奇',2)  
     sougou_face('哈士奇',3)   sougou_face('哈士奇',4)  ,循环即可自动抓去 ,本文只显示手动抓取某一页
     4.这是早上突发奇想完成的,代码肯定有需要改善的地方,希望各位提出,谢谢??!
     5.最后如果你在 本地调试 ,cmd命令里面直接传参数
     cmd   python test.py 哈士奇 1    
     只需要添加  ,至于为什么要编码 ,就是cmd窗口默认是gbk编码,我们接受的值需要转化
     s_name = sys.argv[1].decode('gbk').encode('utf8')
    s_page = sys.argv[2]
    sogou_data = sougou_face(s_name,s_page)
    list_img(sogou_data)
    exit()

最后显示部分成果
python 获取搜狗输入法里面所有的表情图片

转载自://blog.51cto.com/11484956/2317168

招聘 不方便扫码就复制添加关注:程序员招聘谷,微信号:jobs1024



pandas中set_index和reset_index的用法
pandas中set_index和reset_index的用法。
复合高斯积分(节点数小于等于1的版本Python实现)
复合高斯积分(节点数小于等于1的版本Python实现)。
导出导入数据库流水账的操作教程
导出导入数据库流水账的操作教程。导出数据库,因为本地只有plsql,没有安装oracle客户端,无法通过工具导出数据库(导出时没有可执行文件)。
二叉树的前序遍历算法介绍和代码讲解
二叉树的前序遍历算法介绍和代码讲解。二叉树的遍历是指从根节点出发,按照某种次序依次访问二叉树中的所有结点,使得每个结点被访问一次且仅被访问一次。常见的二叉树遍历方式有四种:前序遍历,中序遍历,后序遍历,及层序遍历。
什么是SNMP?为什么需要SNMP,以及SNMP的优点?
SNMP是“SimpleNetworkManagementProtocol”的缩写,中文意思是简单网络管理协议,它是由互联网工作小组在RFC1157中定义的应用层协议,用于在网络实体或节点之间交换管理或监控信息。作为运维人员,我们很大一部分的工作就是为了保证我们的网络能够正常、稳定的运行。因此监控,控制,管理各种网络设备成了我们日常的工作。在网络兴起的早期,维护方式就是运维人员蹲在近端对设备进行各
马云:未来几年最赚钱的五个行业是什么?其中就有大数据!
 一、马云谈2018年最赚钱的生意家具行业、母婴市场、大数据行业、新式茶业、计算机视觉行业,这五大领域是马云眼中2018年最赚钱的生意。
清除指定路径下所有文件的小工具
importtkinterfromtkinterimport*importospath='C:\\Users\\1\\AppData\\Local\\Microsoft\\Windows\\TemporaryInternetFiles'classClean:#传入window参数def__init__(self,init_window):...
区块链 回归初心——关于DAO的深度再思考
写在前面作为创业经验相对丰富和多个公司合伙人经验的我来说,创建并经营一个公司已经不再是无头苍蝇。但是乐扣老师想做一个相对较大的试验,就是希望通过用DAO的思维来对公司治理进行变革。通过一个超大型的生态构建和治理过程来证明DAO哲学思维的社会实践性是可靠的。通俗点就是乐扣老师希望用DAO来做一番事业,然后还能成功。正文部分先回答几个问题:DAO是什么?DAO作为一个去中心化...
私钥和公钥的区别和联系
首先我们需要区分加密和认证这两个基本概念?! 〖用苁墙葑柿霞用?,使得非法用户即使取得加密过的资料,也无法获取正确的资料内容,所以数据加密可以?;な?,防止监听攻击。其重点在于数据的安全性。身份认证是用来判断某个身份的真实性,确认身份后,系统才可以依不同的身份给予不同的权限。其重点在于用户的真实性。两者的侧重点是不同的?! 」亢退皆俊 ∑浯挝颐腔挂私夤亢退皆康母拍詈妥饔??! ≡谙执苈?..