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

      http://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,  这种我们自然
	 可以获取二进制和图片后缀, 但是搜狗也会返回
	 http://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 = 'http://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
		
		#解析图片
	#http://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()

最后显示部分成果