华为云FunctionGraph写个爬虫-真香
最近在学习华为云的FunctionGraph,终于体会到大佬说的serverless有多香了,FunctionGraph允许用户在线开发执行python代码,另外还提供多种触发机制,可以说爬虫需要的他都有,最关键的是,前100万次/月调用免费,真白送一点也不含糊!
今天突发奇想,有个神奇的剁手网站叫什么值得买,笔者的老婆经常在上面剁手,那个网站向众多电商网站一样,提供每天打卡换积分的活动,于是乎笔者突发奇想,写个爬虫double白嫖他不香吗
有关如何分析打卡的url不是本文的重点,相信大佬们都会,小白们也不用担心,文末会有代码奉上。
创建函数工作流
登录华为云console,进入到函数工作流,点击右上角的创建函数按钮:
创建函数我们选择python3.6,其他都不用改
下方的文本编辑框可以写代码,这里就直接上代码了,这段代码实现两个功能
- 利用预置的网站cookie调API打卡
- 将打卡的结果发邮件给qq邮箱
代码如下:
import random
import smtplib
import time
from email.mime.text import MIMEText
import requests
import json
from email.mime.multipart import MIMEMultipart
msg_from = 'xxxx@qq.com' # sender
to = ['xxxx@qq.com'] # receiver
current_url = 'https://zhiyou.smzdm.com/user/info/jsonp_get_current'
checkin_url = 'https://zhiyou.smzdm.com/user/checkin/jsonp_checkin'
def handler (event, context):
user_cookie = context.getUserData('user_cookie').encode('utf-8')
passwd = context.getUserData('mail_password')
#time.sleep(random.randint(0, 60))
try:
data = http_request(current_url, user_cookie)
if not data['checkin']['has_checkin']:
checkin = http_request(checkin_url, user_cookie)['data']
print(checkin)
data = http_request(current_url, user_cookie)
info = '%s :%s 你目前积分:%s,经验值:%s,金币:%s,碎银子:%s,威望:%s,等级:%s,已经签到:%s天' % (
data['sys_date'], data['nickname'], data['point'], data['exp'], data['gold'], data['silver'],
data['prestige'],
data['level'], data['checkin']['daily_checkin_num'])
except Exception as ex:
print(ex)
return "Fail to get bonus. " + str(ex)
report(info, passwd)
return info
def http_request(url, user_cookie):
headers = {
'Referer': 'https://www.smzdm.com/',
'Host': 'zhiyou.smzdm.com',
'Cookie': user_cookie,
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"
}
res = requests.get(url, headers=headers)
if res.status_code == 200:
data = json.loads(res.text)
return data
else:
raise Exception(res.text)
def report(content, passwd):
msg = MIMEMultipart()
msg.attach(MIMEText(content, 'plain', 'utf-8'))
msg['Subject'] = "smzdm bonue report"
msg['From'] = msg_from
s = smtplib.SMTP_SSL("smtp.qq.com", 465)
s.login(msg_from, passwd)
s.sendmail(msg_from, to, msg.as_string())
多啰嗦两句,这里的handler
函数是整改程序的入口,event
和context
是框架内置的两个对象,用户的参数都是通过这两个对象带过来的。那么有同学要问了,这里要带什么参数呢?
user_cookie = context.getUserData('user_cookie').encode('utf-8')
passwd = context.getUserData('mail_password')
从这两句代码看到,我们需要传入一个user_cookie
和一个mail_password
,cookie是我们在剁手网站上登录后从浏览器中获取到的,因为smzdm网站有登录人机验证,所以我们手动登录后把cookie抠出来;qq邮箱授权码是从qq邮箱里获取的,详见如何获取qq邮箱授权码
配置参数
点击配置页签,FunctionGraph提供了加密配置功能,可以妥善帮我们保存密码,配置好key-value以后,在代码中通过context.getUserData('user_cookie')
的方式可以获取解密后的结果
到这里函数就基本配置好了,可以点击右上角的测试按钮试一下,可以看到执行结果,你也可以通过在代码里print
打印日志来debug
配置触发器
最后一步是配置触发器,我们希望这个函数能够每天定时打卡,这就需要定时器来定时触发。点击触发器选卡> 创建触发器
这里支持周期触发和cron
表达式
配置好以后就可以自动打卡白嫖积分了,网站的cookie一般可以保持一周有效,打卡函数完成后会发邮件给你,所以如果看到邮件有异常就重新设置一下cookie。总之白嫖真香。。。
- 点赞
- 收藏
- 关注作者
评论(0)