华为云FunctionGraph写个爬虫-真香

举报
菊花茶 发表于 2021/09/15 20:39:26 2021/09/15
【摘要】 教你白嫖电商网站积分,学好数理化走遍天下都不怕

最近在学习华为云的FunctionGraph,终于体会到大佬说的serverless有多香了,FunctionGraph允许用户在线开发执行python代码,另外还提供多种触发机制,可以说爬虫需要的他都有,最关键的是,前100万次/月调用免费,真白送一点也不含糊!

今天突发奇想,有个神奇的剁手网站叫什么值得买,笔者的老婆经常在上面剁手,那个网站向众多电商网站一样,提供每天打卡换积分的活动,于是乎笔者突发奇想,写个爬虫double白嫖他不香吗

有关如何分析打卡的url不是本文的重点,相信大佬们都会,小白们也不用担心,文末会有代码奉上。

创建函数工作流

登录华为云console,进入到函数工作流,点击右上角的创建函数按钮:
image.png

创建函数我们选择python3.6,其他都不用改
image.png

下方的文本编辑框可以写代码,这里就直接上代码了,这段代码实现两个功能

  • 利用预置的网站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函数是整改程序的入口,eventcontext是框架内置的两个对象,用户的参数都是通过这两个对象带过来的。那么有同学要问了,这里要带什么参数呢?

    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')的方式可以获取解密后的结果
image.png

到这里函数就基本配置好了,可以点击右上角的测试按钮试一下,可以看到执行结果,你也可以通过在代码里print打印日志来debug

image.png

配置触发器

最后一步是配置触发器,我们希望这个函数能够每天定时打卡,这就需要定时器来定时触发。点击触发器选卡> 创建触发器

image.png

这里支持周期触发和cron表达式

配置好以后就可以自动打卡白嫖积分了,网站的cookie一般可以保持一周有效,打卡函数完成后会发邮件给你,所以如果看到邮件有异常就重新设置一下cookie。总之白嫖真香。。。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。