微信作为一个生活方式,已经融入我们的生活。每天打开微信,聊天、看朋友圈、看公众号……
但微信的作用远不止于此,上一篇推送已经展示了如何使用微信来扩展FME的功能,让使用者能随时随地了解FME的运行状态。但其实我们可以做的更多,比如,动态的传入参数,来控制程序的运行!
1.遇到的问题 以前我也采集过这些信息,但是长时间不用,如今想在采集点信息,发现麻烦多了。网站现在会判断采集的频率,采集过快的话不会返回数据,另外还会验证cookie(某大神,道号和尚!貌似有绕过这个验证的方法,但是我没有!)。所以需要采取一些别的方法来突破这些验证!
2.解决方式 针对出现的问题,我在采集的数据中写了几个函数,来调用微信的服务接口,通过微信传入所需要的参数,比如:如果我检测到返回的状态码为6,那么我就会调用tooFast函数来处理,同样的,如果检测到cookie过期,也采用类似的方式来处理。 验证处理
import time
import requests
class get_poi():
def setSe(self):
#设置cookie
st = "oo"
requests.get('http://127.0.0.1:5000/fwx/{"XX":"通知:%s"}'%('???!cookie过期了,准备新的cookie吧!'))
while st != "ok":
print('cookie过期')
time.sleep(3)
tst = requests.get('http://127.0.0.1:5000/jsxx').json()
st = tst[0]
ck = tst[1]
requests.get('http://127.0.0.1:5000/fwx/{"XX":"通知:%s"}'%('???!新cookie已到位!开始下载了!老乡?!'))
mSession = self.set_cookie(ck)
return mSession
def tooFast(self):
requests.get('http://127.0.0.1:5000/fwx/{"XX":"通知:%s"}'%('???!下载太快了!去电脑上进行人机验证吧!'))
st = "oo"
while st != "ok":
print('你太快了,少侠!')
time.sleep(3)
tst = requests.get('http://127.0.0.1:5000/jsxx').json()
st = tst[0] #time.sleep(90)
requests.get('http://127.0.0.1:5000/fwx/{"XX":"通知:%s"}'%('???!已通过人机验证!开始下载!'))
def set_cookie(self,cook):
ptn = re.compile("(?<=Cookie: ).+?(?=##)")
ck = re.sub('\n','##',cook)
lck = [i.split('=') for i in ptn.search(ck).group().split('; ')]
sess = requests.Session()
for i in lck:
sess.cookies.set(i[0],i[1])
return sess
微信功能模块
import json
from wxpy import Bot# 初始化机器人,扫码登陆
bot = Bot()# 定义一个发微信的功能
def func_wx(string):
#接收json作为参数,json的键值为要发送信息的对象,键值对应的内容为发送的消息
rdict = json.loads(string)
# print(rdict)
for k in rdict:
# print(rdict[k])
my_friend = bot.friends().search(k)[0]
my_friend.send_msg(rdict[k])
def get_xx():
msg = bot.messages
if msg:
for i in msg:
if i.sender.name == '刘松':
rtext = i.text
if rtext == 'ok':
r = ('ok','_')
msg.clear()
elif 'Cookie' in rtext:
cookie = rtext
r = ('ok',cookie)
msg.clear()
else:
msg.remove(i)
r = ('继续吧1!','_')
else:
msg.remove(i)
r = ('继续吧2!','_')
else:
r = ('继续吧3!','_')
return r
微信界面