当前位置: 首页 > 后端技术 > Python

还没有副业?教你用Python写一个淘宝客服结账机器人

时间:2023-03-26 18:32:16 Python

写在前面:本文只讨论技术实现原理和指导教程,不做广告,不做推广。文章有点长,大家可以随意取。说起2020年讨论最多的词,我想副业应该是其中之一。年初的疫情把大家锁在家里,很多人失去了收入。于是,副业成了刚需。一时之间,朋友圈里各种卖东西的朋友如雨后春笋般涌现——谁谁谁兼职赚了几万甚至几十万的消息不断。你能接受吗?反正我是受不了了!我不能卖东西,但我可以让你更自动地卖东西。总结本文使用Python实现一个淘宝客户微信机器人,自动获取包含大额优惠券的促销购买链接,促销员将可以获得促销提成。具体功能如下:将淘宝密码发送给机器人,机器人可以自动获取对应的大额优惠券,将您要购买的商品名称发送给机器人,机器人会自动搜索对应的商品,并筛选出性价比最高(当然是佣金相对最高)的产品生成、推广和购买链接附加功能:生成对应销售平台(闲鱼、转转等)的产品描述,简化listing操作(将上一步获取的信息放入模板即可)。itchat和Wechaty的主要概念是app数据爬取和微信机器人app数据爬取。在家疫情期间,除了淘宝官方客服平台外,我也接触了一些第三方平台,对他们各自的佣金比例和平台口碑有了一定的了解。有些有网页和应用程序,有些只有应用程序。不幸的是,我选择的我认为最好的只有一个应用程序。那么,如何爬取app中的数据呢?这对程序员来说当然不是问题。爬取前的准备手机端工具有限,用户体验不好。想到通过电脑传输手机上的数据就很直接了。只要通过电脑,事情就好办了。我们使用Fiddler来做这件事:Fiddler是一个http协议调试代理工具,可以记录和检查你的电脑和互联网之间的所有http通信,设置断点,查看Fiddler“进出”的所有数据。下面简单介绍一下,我们来看看这个工具的下载和配置。以下文字参考自:Python3,x:HowtocrawldatafrommobileAPP,感谢作者分享。Fiddler下载及配置首先去官网下载,根据系统选择安装包,下载地址为:https://www.telerik.com/download/fiddler。安装过程很简单,没什么特别的,直接下一步就可以了。安装后需要设置如下几项:设置允许抓取HTTPS包,在菜单栏找到Tools->Options,然后在HTTPS工具栏下勾选DecrptHTTPStraffic,在新弹出的下勾选Ignoreservercertificate选项栏错误(不安全)。这样Fiddler就会抓取HTTPS包了。设置为允许外部设备向Fiddler发送HTTP/HTTPS。勾选Connections选项栏下的Allowremotecomputerstoconnect,记住上面的端口号8888,后面会用到。重启Fiddler移动端设置移动端的配置比较麻烦,不过还好。我用的是苹果电脑,所以这里只介绍苹果电脑的配置。其他系统的手机可以直接上网搜索教程。类似的教程还有很多,这里就不赘述了。将手机和电脑设置在同一个网络中。上面说了,手机上的数据是通过电脑传输的。基本前提是手机和电脑必须在同一个网络。如果家里有WIFI,手机和电脑都连接这个WIFI。如果台式电脑没有无线网卡,可以用网线连接WIFI对应的路由器;也可以。设置手机HTTP代理,首先获取电脑的IP地址:然后进入手机WIFI设置界面,选择当前连接网络的更多信息,在苹果里面是感叹号。点击进入后,会在最下方看到HTTP代理选项,选择点击进入,选择手动。进入后填写上面记住的IP地址和端口号,确定保存:下载并安装Fiddler安全证书手机打开Safari浏览器,输入一个由以上IP地址和端口号组成的url:http://192.168.2.107:8888。打开后会看到如下界面,然后点击FiddlerRoot证书,允许下载Fiddler证书。下载完成后,进入设置安装证书:至此,Fiddler的安装配置就完成了。开始爬取请求,在手机端打开对应的app。Fiddler会出来很多请求。根据url,我们可以很容易的找到我们想要的。这些内容就是获取我们在app上看到的信息的网络请求,所以我们只需要用代码实现这些请求就可以获取到app上的信息了。【本文来自TitusCosmos微信公众号Titus,ID为TitusCosmos,转载请注明!】【为防止各种爬虫在网络上爬取,故意删除原作者信息,故在文中添加作者信息,望读者谅解】根据需要,我们找到了淘宝密码搜索项、直接搜索项、特定项依次进行。生成三种请求,促销购买链接和淘宝密码。分析请求我们来看看这些请求的具体内容。点击一个请求,然后点击响应栏中的JSON选项卡,可以看到请求返回的信息是一组Json字符串:下面是生成淘宝密码和链接的请求对应的Json:可以清楚查看相应项目的图片,有关价格、佣金的信息和简要说明,这正是我们想要的。以淘宝密码搜索项为例,请求栏的Headers选项卡中也有本次请求的详细请求头信息:simulatedrequest有了这些信息,我们就可以很清楚地模拟发送请求,代码如下:parseimporturlencodeimportrequestsimportpprintdefanalysis_keyword(keyword):headers={'Host':'proxy.guod********.com','Content-Type':'application/x-www-form-urlencoded'},'x-appid':'1911140394','Accept':'*/*','x-agent':'JellyBox/2.2.4(iOS,iPhone8Plus,13.3.1)','x-token':'','x-devid':'DF3D1D14-3230-497E-811E-C4425521736F','接受语言':'zh-Hans-CN;q=1','接受编码':'gzip,deflate,br','x-userid':'','User-Agent':'AffordablePig/2.2.4(iPhone;iOS13.3.1;Scale/3.00)','Content-Length':'0','x-nettype':'WIFI','x-platform':'iOS','x-devtype':'UTDID','Cookie':'PHPSESSID={}','Connection':'keep-alive',}headers['x-token']=******headers['x-userid']=******headers['Cook即'].format('**************')encoded_keyword=urlencode(keyword)query_url='https://proxy.guod*********.com/cate/search?q={}&sort=&coupon=false&type=2&page=1'.format(encoded_keyword)sess=requests.session()result=sess.post(query_url,headers=headers).json()pprint.pprint(result)返回结果print(analysis_keyword('*****'))运行后得到的信息是:太长了,就不全部贴出来了,是不是和Fiddler上的一样?其他请求也是如此。但有时你需要一步一步地做每一个请求,因为它们是联系在一起的。当微信机器人过来的时候,我们应该可以获取到上面提到的信息,那我们怎么发给微信呢?实现微信控制的库有很多。我用过的比较有代表性的是itchat和Wechaty。它们都可以实现微信登录、收发消息等微信操作,只是实现方式不同。这两个库在之前的文章中已经多次介绍过,这里不再赘述。机器人的实现方式也很简单。用户将要查询的商品名称或淘宝密码发送给机器人。如果是在群聊中,则需要用户@bot(需要通过@确认查询指令),机器人会自动对应推广。物品信息。为了保持实现机器人功能的代码单一,我将所有查看优惠券的代码放在一个文件中。一般优惠券代码上面的代码可以得到商品的详细信息,但是不可能直接把那些东西给用户,所以需要组织成一条简洁的短信。代码如下(虽然注释少,但变量名是注释0.0),类似代码已删除:#获取关键信息defgen_good_coupan_desc(result,uland_url):good_data=result['result'][0]#这里result就是上面得到的结果good_name=good_data['goods_name']good_id=good_data['goods_id']good_url='https://detail.tmall.com/item.htm?id={}'.format(good_id)good_pre_price=good_data['attr_prime']good_cur_price=good_data['attr_prime']attr_ratio=good_data['attr_ratio']coupon=good_data['coupon_explain']if'coupon_explain'ingood_dataelse']'coupon_begin_date=good_data['cocoupon_begin'ingood_dataelse''coupon_final_date=good_data['coupon_final']if'coupon_final'ingood_dataelse''coupon_start_fee=good_data['coupon_start_fee']if'coupon_start_fee'ingood_dataelse''coupon_saving_amount=good_data['coupon_amount']ifgood_data中的'coupon_amount'\else'{:.2f}'.format(float(good_pre_price)-float(good_cur_price))price_info='当前价格:{},实际价格:{}'.format(good_pre_price,good_cur_price)coupon_info=''ifcoupon_begin_date!=''andcoupon_final_date!='':coupon_info='优惠券有效期:{}-{}'.format(coupon_begin_date,coupon_final_date)good_image_url=good_data['goods_thumb']params={'timestamp':str(time.time()).split('.')[0],'url':uland_url,'member_id':headers['x-userid'],'text':good_name,'logo':good_image_url,'goods_id':good_id,'attr_prime':str(good_pre_price),'attr_price':str(good_cur_price),'attr_ratio':str(attr_ratio)}返回params,good_url,good_image_url,good_name,price_info,coupon_infodefget_uland_url(result):passreturn#返回优惠券链接defgen_TKL(result):#代码类似于获取商品详情,省略passreturn#返回促销淘宝密码defgen_web_url(result):#代码类似于获取商品详情,省略passreturn#返回推广链接defget_good_desc(keyword):result=analysis_keyword(keyword)uland_url=get_uland_url(result)coupan_desc=gen_good_coupan_desc(result,uland_url)ifisinstance(coupan_desc,str):继续回复文字reply_TKL=reply_head+'复制此信息到TB领取隐藏优惠券({})'.format(my_tkl)good_reply=[good_name,price_info,coupon_info,reply_TKL]ifcoupon_info!=''\else[good_name,price_info,reply_TKL]return'\n'.join(good_reply)print(get_good_desc(result))发送淘宝密码?hr6a****ZTy?给机器人时,机器人回复:****MedicalMaskDisposablemedical口罩三层防护灭菌熔喷布夏季透气非手术当前价格:18.8,实际价格:16.8优惠券有效期:20200908-20200913复制此信息到TB领取隐藏优惠券(?C9v3c****po?)好吧,现在万事俱备,我们只欠东风,让我们看看如何实现机器人。itchat版机器人代码itchat我写过很多篇了,这里直接上代码:#-*-coding=utf8-*-importitchatfromitchat.contentimport*#如果是朋友发的短信@itchat.msg_register([TEXT])deftext_reply(msg):sender_id=msg['User']['UserName']if'UserName'inmsg['User']else'filehelper'content=msg['Content']#生成回复textreply=get_good_desc(keyword)itchat.send_msg(reply,sender_id)#如果是群聊发送的短信@itchat.msg_register([TEXT],isGroupChat=True)defgroup_reply(msg):content=msg['Text']ifmsg['IsAt']:#如果是@#获取需要查询的信息(消息文本中去掉@和@后面的符号)content='\u2005'.join(content.split('\u2005')[1:])if'\u2005'incontent\else'''.join(content.split('')[1:])sender_id=msg['User']['UserName']#生成回复文本reply=get_good_desc(keyword)itchat.send_msg(reply,sender_id)if__name__=='__main__':itchat.auto_login(hotReload=True)itchat.run()微信版机器人代码其实大同小异,只是每个库都有不同的库如何使用,废话不多说,出示代码:来自微信importWechatyfromtypingimportOptional,Union,Listfromwechaty_puppetimportScanStatus,MessageTypefromwechaty.userimportMessage,RoomfromwechatyimportFriendship,FriendshipType,Contactimportasyncioasyncdefon_message(msg:Message):await(from)msg??_contactker(room=msg.room)()#如果是短信ifmsg.payload.type==MessageType.MESSAGE_TYPE_TEXT:#并且计费机器人是@ifwechaty_robot_idinmsg.payload.mention_ids:content=msg.text()ifroomisNone:#如果是好友发来的消息,则直接生成回复文本reply=get_good_desc(content)awaitfrom_contact.ready()from_contact.say(reply)else:#如果是@'s处理的群聊消息messageif'\u2005'incontent:#手机发送的消息会有这个特殊符号content='\u2005'.join([itemforitemincontent.split('\u2005')ifnotitem.startswith('@')])else:#计算机发送一个空格content=''.join([itemforitemincontent.split('')ifnotitem.startswith('@')])reply=get_good_desc(content)awaitroom.ready()room.say(reply)asyncdefbot_start():bot=Wechaty()#将消息处理方法绑定到“消息”事件bot.on('message',on_message)awaitbot.start()asyncio.run(bot_start())效果演示so之后很多,是时候添加一些真实的东西了。下面是实际操作效果图(图有点长,大家可以赶紧拉上来。。。):以我的感觉,很多人之所以热衷于兼职,还是因为没钱或者钱不够,毕竟今年社畜压力太大了。如果本文能对您有所帮助,给您带来不一样的想法,将不胜欣慰。最后希望大家都能不打工也能过上幸福的生活。后记不管写什么,都希望能和更多的人交流。如果您有任何问题或需求,欢迎随时交流。我所有的项目源码都会放在下面的github仓库,有需要的可以参考,有问题请指正,谢谢!https://github.com/TitusWongCN/以下是我的公众号,有兴趣的可以扫一扫: