大众点评免费试活动自动报名

犹记得本科的某段时期,点评上的霸王餐是让我走出校门,游荡京城的很大一个原因。而在其他时候,囊中羞涩的我只能感叹一句京城居不宜而更多地选择宅在宿舍。之后一方面是生活费变得充足,一方面是因为霸王餐的申请有些麻烦就逐渐忘记了继续在点评上继续报名。

真正产生写一个报名脚本的想法诞生在找工作时期,不过那时候一方面爬虫知识忘记了许多,另一方面也因为实在没有这个精力和心情来写,然后就拖到了现在......

话不多说,上来就是一段源码:

def find_activity():
    headers = {
        "Host": "m.dianping.com",
        "Referer": "https://m.dianping.com/freemeal/index",
        "User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Mobile Safari/537.36"
    }

    url = "https://m.dianping.com/astro-plat/freemeal/loadLotteryList?cityid=2&latitude=&longitude=&env=dp&regionParentId=0&regionId=0&category=0&sort=0&type=1&page={}"
    index = 1
    id_list = []
    while True:
        cur_url = url.format(str(index))
        index += 1
        res = requests.get(cur_url, headers=headers)
        data = json.loads(res.text)["data"]
        if data["pageEnd"]:
            break
        else:
            print(data)
            lotteryActivityList = data["lotteryActivityList"]
            for item in lotteryActivityList:
                id = item['offlineActivityId']
                title = item['title']
                type = item['type']
                if type == 1:
                    id_list.append((id,title))
        time.sleep(random.uniform(0.5, 1))
    return id_list

if __name__ == '__main__':
    find_activity()

此函数用来寻找所有可用的霸王餐活动,最后返回一个列表,包含活动名称和对应的编号。url中包含page,所以写了一个while循环找到所有页面的内容,直到pageEnd标识为True,然后结束循环,其他好像也没什么好说的。
有了编号就可以直接通过post提交表单来自动报名:

import requests
import time
import random


def sign_up(id_list):
    sign_url = "http://s.dianping.com/ajax/json/activity/offline/saveApplyInfo"
    for index in range(len(id_list)):
        id = id_list[index][0]
        title = id_list[index][1]
        sign_headers = {
            "Host": "s.dianping.com",
            "Origin": "http://s.dianping.com",
            "Referer": "http://s.dianping.com/event/{}".format(id),
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36"
        }
        cookies = {
            'fspop': '#',
            'cy': '#',
            'cye': '#',
            '_lxsdk_cuid': '#',
            '_lxsdk': '#',
            '_hc.v': '#',
            'dplet': '#',
            'dper': '#',
            'll': '#',
            'ua': '#',
            'ctu': '#',
            'Hm_lvt_602b80cf8079ae6591966cc70a3940e7': '#',
            's_ViewType': '#',
            '_lx_utm': '#',
            'Hm_lpvt_602b80cf8079ae6591966cc70a3940e7': '#',
            '_lxsdk_s': '#'
        }
        data = {
            'offlineActivityId': id,
            'phoneNo': '#',
            'shippingAddress': '',
            'extraCount': '',
            'birthdayStr': '',
            'email': '',
            'marryDayStr': '',
            'babyBirths': '',
            'pregnant': '',
            'marryStatus': '0',
            'comboId': '',
            'branchId': '',
            'usePassCard': '0',
            'passCardNo': '',
            'isShareSina': 'false',
            'isShareQQ': 'false'
        }
        res = requests.post(sign_url, headers=sign_headers, cookies=cookies, data=data)
        print(title, res.text)
        time.sleep(random.uniform(0.5, 1))

cookies需要填自己账号正常访问产生的cookies,跑完一遍就将霸王餐报名成功啦。

除了一种情况:该活动有多家门店参加活动,但不通用,需要选择一家门店来报名。这个时候表单中branchId会有该门店的shopid值,为一串数字,不适用该数字形式的branchId会报名失败(仅针对多门店不通用情况):


branchId

但在页面中找不到这串数字,只能找到shopid的字符串:


shopid

而shop/k3VuR1XItjK7I1wW
和shop/1856704708

这俩url指向的是同一个地址,因此我认为点评隐藏了真正的shopid而将其编码后的结果作为shopid放了出来,后台可以将其对应起来而用户无法找到真实的shopid也就无法在提交表单时输入正确的branchId。

不过结果我一下午的尝试,真实branchId还是存在的,而且好像在店铺主界面shop/k3VuR1XItjK7I1wW就存在,奇怪,之前没有的,现在能够找到了:


请求店铺界面的返回

但是我也懒得写了,就这样吧,再爬号都要封了。


不说了,要被封号了

之前爬的时候没过滤type,导致报名了一堆丽人项目,这这这这这。。。我看60个名额的项目只有29个报名,谁知道有多坑,而且之后报上了还得手动退。赶紧再改改,加上对type的过滤后就只剩美食项目了。
效果

好啦,我们下期再见!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,490评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,581评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,830评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,957评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,974评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,754评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,464评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,847评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,995评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,137评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,819评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,482评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,023评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,149评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,409评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,086评论 2 355

推荐阅读更多精彩内容