Python 骚操作!如何让自己在斗图中立于不败之地?
点击⬆️“小詹学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 骚操作!如何让自己在斗图中立于不败之地?相关推荐
- qq斗图之电脑斗图---如何立于不败之地
.....存在这样一种情况.手机上图很多,,电脑上却没有 所以每次人家发完图之后 斗图之心猛然而起却又找不到图... but 斗图图片不会创造,只会从一个地方跑到另一个地方 电脑上图片存储 路径 知 ...
- Python骚操作:Python控制Excel实现自动化办公!
Python骚操作:Python控制Excel实现自动化办公! 1.安装 Python骚操作:Python控制Excel实现自动化办公! 2.操作一个简单的Excel文档 操作注释及代码: Pytho ...
- Python骚操作—自动刷抖音
python骚操作之电脑自动刷抖音 上篇文章发完之后,有朋友在后台留言给我,说手机自动化控制很炫酷,但是appium的安装和使用很复杂,想让我写一篇详细文章介绍一下,下面我就以自动刷抖音为例简单介绍一 ...
- Python骚操作,实现驾考自动答题,直接满分
Python骚操作来了~ 用Python来实现科目一/四自动答题,100分不要太简单! 最初是表弟最近想买车,但是驾照都没有,买什么车,只能先考驾照~ 看他在网页上练习题目慢吞吞的,我就看不下去了,直 ...
- 10 个让你相见恨晚的 Python 骚操作
众所周知,Python 以语法简洁著称,同样实现一个功能,Java 可能要十来行,Python 一行就可以搞定. Python 的代码之所以这么优雅,完全归功于其独有的特性,只要你掌握了这些特性,同样 ...
- Python 骚操作,微信远程控制电脑
**今天带给大家一个非常有意思的 python 程序,基于 itchat 实现微信控制电脑.你可以通过在微信发送命令,来拍摄当前电脑的使用者,然后图片会发送到你的微信上.甚至你可以发送命令来远程关闭电 ...
- 【Python】这些Python骚操作,你值得拥有
Python 我用的比较多一点,对一些小玩意有些许了解.我不大清楚骚操作怎么定义,只好说说我觉得 Python 和其它语言(比如 C 和 JAVA 等)设定比较奇特的地方. 看了后,说不定你马上就有玩 ...
- Python骚操作-微信远程控制电脑
Python+微信远程控制电脑 今天带给大家一个非常有意思的 python 程序,基于 itchat 实现微信控制电脑.你可以通过在微信发送命令,来拍摄当前电脑的使用者,然后图片会发送到你的微信上.甚 ...
- Python骚操作之微信远程控制电脑
前言 好几天没给大家写文章了,原因是这几天比较忙,再又马上开学了,所以有些事情有些力不从心,不过之后,我会调整好时间,尽量每周给大家带来3-4篇的文章,接下来的一段时间,文章内容会有一些跟Python ...
最新文章
- 解决Android Stadio 导入Android 项目,没有可运行的Module
- 何时开始phonics学习及配套阅读训练zz
- DayDayUp之Job:牛客网—算法工程师—剑指offer之66道在线编程(解决思路及其代码)——1~20
- 自定义Java annotation及解析和使用
- jsp调用controller方法_RPC调用_服务注册与发现
- Oracle客房管理系统论文,[转载]基于WEB的酒店管理系统论文【1】
- mysql 外键约束条件_MySQL-条件外键约束-问答-阿里云开发者社区-阿里云
- java编程新手初学者入门学习,看什么书比较好
- 测试用例设计方法——黑盒测试和白盒测试
- NFT头像屡拍天价,如何从理性角度分析其市场价值?
- 微信小程序 视频列表滑动无限循环(仿抖音)
- qt 图片适应窗口_Qt图片自适应窗口控件大小
- html css 3D 立体相册
- 唐纳德·A·诺曼《设计心理学2 与复杂共处 修订版》(高清带目录)pdf下载
- Openwrt无线管理工具/命令
- 【AIOT】Haptics Contributes To Contactless HCI
- 嵌入式openwrt平台(mt7688)上使用讯飞语音服务
- Auto CAD:CAD软件之底边菜单栏(捕捉模式、极轴状态、对象捕捉、允许禁止动态UCS、动态输入、显示隐藏线宽、快速查看图形、选择循环命令、切换空间按钮)简介之详细攻略
- 【网络流24题补全计划】
- 完美驱动 AppleHDA
热门文章
- mysql自带命令使用教程_自用mysql自带命令实现数据库备份还原
- 微信小程序时间转换成时间戳、获取当前时间戳、获取当前时间、时间戳加减
- python邮件添加附件_如何向电子邮件python添加多个附件
- java 实验张智,JAVA实验指导
- jsoup 获取html中body内容_python爬虫之下载盗墓笔记(bs4解析HTML)
- matlab正弦光栅,科学网—光栅-正弦,矩形 - 宗兆玉的博文
- 【vue】安装新版本vue-cli:@vue/cli
- 【spring boot】 mybatis配置双数据源/多数据源
- java -jar 启动程序/设置classpath
- centos7python命令_CentOS7中将Python2.7.5 升级到Python3.5.2