点击⬆️“小詹学Python”,选择“星标公众号”

福利干货,第一时间送达!

本文授权转载自AirPython,禁二次转载

阅读文本大概需要 6 分钟。

1

目 标 场 景

平常和小伙伴们斗图的过程中,你是否觉得微信的表情收藏夹不够用,或者是查找太麻烦,不够个性化?

那是否可以利用 Python,帮我们挑选到合适的表情,发送到指定的朋友和微信群呢?

本文的目标是根据关键字爬取「斗图啦」网站上的表情文件,然后登录网页微信端,挑选到合适的表情图片下载到本地,最后发送给指定的对象。

2

准 备 工 作

爬取到表情后,需要人工进行一次筛选;另外模拟登录微信、发送文件,我们需要通过 pip3 安装好「matplotlib」和「itchat」库。

# 图形显示库pip3 install matplotlib# 安装itchatpip3 install itchatpip3 install matplotlib

# 安装itchatpip3 install itchat

3

分 析 思 路

我们打开斗图啦的官网,输入关键字「装逼」,点击搜索,发现页面分页后匹配到了很多表情图片。

首先,我们利用 xpath 获取到当前页面内所有表情父容器元素的列表。

# 获取当前页面的元素resp = requests.get(current_url, headers=HEADERS)html_raw = etree.HTML(resp.text)# 获取到所有的表情图片所在的a标签a_elements = html_raw.xpath('//div[@class="pic-content text-center"]/div[@class="random_picture"]/a')resp = requests.get(current_url, headers=HEADERS)

html_raw = etree.HTML(resp.text)

# 获取到所有的表情图片所在的a标签a_elements = html_raw.xpath('//div[@class="pic-content text-center"]/div[@class="random_picture"]/a')

接着,遍历容器列表,获取到所有表情的名称、下载地址属性信息。

for a_element in a_elements:            # 获取img标签【最后一个img】【存储地址】            img_element = a_element.xpath('./img[last()]')[0]            # 获取p标签【存储名称】            name = a_element.xpath('./p/text()')[0]            # 表情的下载地址            img_url = img_element.get('data-original')            # 注意:由于itchat没法发送带中文的文件,这里随机生成一个名称            name_new = make_random_string(6)            img_name = name_new + os.path.splitext(img_url)[-1]            imgs.append({                'name': img_name,                'url': img_url            })in a_elements:            # 获取img标签【最后一个img】【存储地址】            img_element = a_element.xpath('./img[last()]')[0]

            # 获取p标签【存储名称】            name = a_element.xpath('./p/text()')[0]

            # 表情的下载地址            img_url = img_element.get('data-original')

            # 注意:由于itchat没法发送带中文的文件,这里随机生成一个名称            name_new = make_random_string(6)

            img_name = name_new + os.path.splitext(img_url)[-1]

            imgs.append({                'name': img_name,                'url': img_url            })

然后,利用「urlretrieve」将表情图片下载到本地;使用「matplotlib」将表情展示出来供我们浏览选择。

# 表情保存的目录local_img = './imgs/%s' % target_emoji.get('name')# 下载到本地request.urlretrieve(target_emoji.get('url'), local_img)# 把表情显示出来供用户选择lena = mpimg.imread(filename)plt.imshow(lena)  plt.axis('off')  plt.show()local_img = './imgs/%s' % target_emoji.get('name')

# 下载到本地request.urlretrieve(target_emoji.get('url'), local_img)

# 把表情显示出来供用户选择lena = mpimg.imread(filename)

plt.imshow(lena)  plt.axis('off')  plt.show()

通过控制台输入内容,决定发送这个表情图片,或者是查看下一个表情图片;也可以通过输入控制发送多个表情图片。

ok = input('主人满意吗:')if ok:   print('好的,就发送这张表情。')   # 需要再发一张吗   go_on_send = input('需要再发一张吗?')   if go_on_send:         continue   else:         print('结束了')         break# 需要再发一张吗   go_on_send = input('需要再发一张吗?')   if go_on_send:         continue   else:         print('结束了')         break

最后,通过 itchat 查询到指定的人,将选中的表情图片发送给他。

def send_to_person(username, file_names):    """    发送给某个人    :param username: 发送对象的昵称    :param filename: 文件名    :return:    """    room = itchat.search_friends(name=r'%s' % username)    userName = room[0]['UserName']    try:        if isinstance(file_names, list):            # 多个图片            for file_name in file_names:                itchat.send_image(file_name, toUserName=userName)        else:            # 一个图片            itchat.send_image(file_names, toUserName=userName)        print('发送完毕!')    except:        print('发送出错!')    """    发送给某个人    :param username: 发送对象的昵称    :param filename: 文件名    :return:    """    room = itchat.search_friends(name=r'%s' % username)

    userName = room[0]['UserName']

    try:        if isinstance(file_names, list):            # 多个图片            for file_name in file_names:                itchat.send_image(file_name, toUserName=userName)        else:            # 一个图片            itchat.send_image(file_names, toUserName=userName)        print('发送完毕!')    except:        print('发送出错!')

也可以通过群聊名称获取到群聊对象,把表情图片发送到指定的微信群内。

def send_to_group_chat(target_group_chat_name, file_names):    """    发送表情到指定的群聊    :param target_group_chat_name:    :param file_name:    :return:    """    rooms = itchat.get_chatrooms(update=True)    # 目标群聊对象    target_room = None    for room in rooms:        group_chat_name = room.get('NickName')        if target_group_chat_name == group_chat_name:            target_room = room            break    if target_room:        if isinstance(file_names, list):            for file_name in file_names:                target_room.send_image(file_name)        else:            target_room.send_image(file_names)        print('发送完毕!')    else:        print('抱歉,不存在这个群聊')    """    发送表情到指定的群聊    :param target_group_chat_name:    :param file_name:    :return:    """    rooms = itchat.get_chatrooms(update=True)

    # 目标群聊对象    target_room = None    for room in rooms:        group_chat_name = room.get('NickName')        if target_group_chat_name == group_chat_name:            target_room = room            break

    if target_room:        if isinstance(file_names, list):            for file_name in file_names:                target_room.send_image(file_name)        else:            target_room.send_image(file_names)

        print('发送完毕!')    else:        print('抱歉,不存在这个群聊')

4

结 果 结 论

运行程序后,通过微信客户端扫描二维码登录微信,然后输入要发送的对象、表情类型,程序会自动爬取到匹配后的表情,最后通过用户筛选后,发送到指定的人。

我已经将全部源码上传到后台上,公众号回复「 斗图 」即可获得。

推荐阅读(点击标题即可跳转)

Python 骚操作:如何给你爱的读者每天发早报?

Python 3.8 即将到来,这是你需要关注的几大新特性

Python 骚操作!如何让自己在斗图中立于不败之地?相关推荐

  1. qq斗图之电脑斗图---如何立于不败之地

    .....存在这样一种情况.手机上图很多,,电脑上却没有 所以每次人家发完图之后 斗图之心猛然而起却又找不到图... but  斗图图片不会创造,只会从一个地方跑到另一个地方 电脑上图片存储 路径 知 ...

  2. Python骚操作:Python控制Excel实现自动化办公!

    Python骚操作:Python控制Excel实现自动化办公! 1.安装 Python骚操作:Python控制Excel实现自动化办公! 2.操作一个简单的Excel文档 操作注释及代码: Pytho ...

  3. Python骚操作—自动刷抖音

    python骚操作之电脑自动刷抖音 上篇文章发完之后,有朋友在后台留言给我,说手机自动化控制很炫酷,但是appium的安装和使用很复杂,想让我写一篇详细文章介绍一下,下面我就以自动刷抖音为例简单介绍一 ...

  4. Python骚操作,实现驾考自动答题,直接满分

    Python骚操作来了~ 用Python来实现科目一/四自动答题,100分不要太简单! 最初是表弟最近想买车,但是驾照都没有,买什么车,只能先考驾照~ 看他在网页上练习题目慢吞吞的,我就看不下去了,直 ...

  5. 10 个让你相见恨晚的 Python 骚操作

    众所周知,Python 以语法简洁著称,同样实现一个功能,Java 可能要十来行,Python 一行就可以搞定. Python 的代码之所以这么优雅,完全归功于其独有的特性,只要你掌握了这些特性,同样 ...

  6. Python 骚操作,微信远程控制电脑

    **今天带给大家一个非常有意思的 python 程序,基于 itchat 实现微信控制电脑.你可以通过在微信发送命令,来拍摄当前电脑的使用者,然后图片会发送到你的微信上.甚至你可以发送命令来远程关闭电 ...

  7. 【Python】这些Python骚操作,你值得拥有

    Python 我用的比较多一点,对一些小玩意有些许了解.我不大清楚骚操作怎么定义,只好说说我觉得 Python 和其它语言(比如 C 和 JAVA 等)设定比较奇特的地方. 看了后,说不定你马上就有玩 ...

  8. Python骚操作-微信远程控制电脑

    Python+微信远程控制电脑 今天带给大家一个非常有意思的 python 程序,基于 itchat 实现微信控制电脑.你可以通过在微信发送命令,来拍摄当前电脑的使用者,然后图片会发送到你的微信上.甚 ...

  9. Python骚操作之微信远程控制电脑

    前言 好几天没给大家写文章了,原因是这几天比较忙,再又马上开学了,所以有些事情有些力不从心,不过之后,我会调整好时间,尽量每周给大家带来3-4篇的文章,接下来的一段时间,文章内容会有一些跟Python ...

最新文章

  1. 解决Android Stadio 导入Android 项目,没有可运行的Module
  2. 何时开始phonics学习及配套阅读训练zz
  3. DayDayUp之Job:牛客网—算法工程师—剑指offer之66道在线编程(解决思路及其代码)——1~20
  4. 自定义Java annotation及解析和使用
  5. jsp调用controller方法_RPC调用_服务注册与发现
  6. Oracle客房管理系统论文,[转载]基于WEB的酒店管理系统论文【1】
  7. mysql 外键约束条件_MySQL-条件外键约束-问答-阿里云开发者社区-阿里云
  8. java编程新手初学者入门学习,看什么书比较好
  9. 测试用例设计方法——黑盒测试和白盒测试
  10. NFT头像屡拍天价,如何从理性角度分析其市场价值?
  11. 微信小程序 视频列表滑动无限循环(仿抖音)
  12. qt 图片适应窗口_Qt图片自适应窗口控件大小
  13. html css 3D 立体相册
  14. 唐纳德·A·诺曼《设计心理学2 与复杂共处 修订版》(高清带目录)pdf下载
  15. Openwrt无线管理工具/命令
  16. 【AIOT】Haptics Contributes To Contactless HCI
  17. 嵌入式openwrt平台(mt7688)上使用讯飞语音服务
  18. Auto CAD:CAD软件之底边菜单栏(捕捉模式、极轴状态、对象捕捉、允许禁止动态UCS、动态输入、显示隐藏线宽、快速查看图形、选择循环命令、切换空间按钮)简介之详细攻略
  19. 【网络流24题补全计划】
  20. 完美驱动 AppleHDA

热门文章

  1. mysql自带命令使用教程_自用mysql自带命令实现数据库备份还原
  2. 微信小程序时间转换成时间戳、获取当前时间戳、获取当前时间、时间戳加减
  3. python邮件添加附件_如何向电子邮件python添加多个附件
  4. java 实验张智,JAVA实验指导
  5. jsoup 获取html中body内容_python爬虫之下载盗墓笔记(bs4解析HTML)
  6. matlab正弦光栅,科学网—光栅-正弦,矩形 - 宗兆玉的博文
  7. 【vue】安装新版本vue-cli:@vue/cli
  8. 【spring boot】 mybatis配置双数据源/多数据源
  9. java -jar 启动程序/设置classpath
  10. centos7python命令_CentOS7中将Python2.7.5 升级到Python3.5.2