😸都闪一闪!你们的喵咪都是我的了!

1,482 阅读3分钟

这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战

最近掘友们在疯狂的晒自己的猫猫,同时,又有广大掘友在疯狂的云吸猫!

我也一样,但是我觉得有点不过瘾,如果能够把你们的猫都搞到手就好了,全部为我所有!

但这不可能实现,很失望,怎么办呢?

814268e3gw1f1980afb74j205k05dwel.jpg

有了!!!虽然搞不到你们的猫,那就退一步,搞到你们的猫的照片,四舍五入一下,不就相当于搞到你们的猫了吗!机智!!!!

那怎样搞到所有猫的照片呢?

一个一个的右键另存为? 不可能的!我来爬一下试试!

掘金运营大大不要封我ip封我号,毕竟我只是一个想撸猫的普通群众(小声哔哔)!

9e31678cgy1fve1k7ynobj204k03cwea.jpg

开干!!

分析网站

通过抓包,我找到了沸点的请求接口,如下: image.png 我大胆猜一下,"theme_id": "7007350783603638279"大概就是"猫星人最可爱的一点"的话题,limit是每次请求的沸点条数,sort是热门和最新两种排序方式,cursor大概就是游标,代表从哪一条开始请求。

通过分析返回体,证明我的猜想是正确的,哈!

image.png

image.png

image.png

而且,我在返回体里找到了,你们的用户名,沸点的内容,以及你们发的猫····的照片url链接!优秀啊!!

那么现在,只差代码了。这都是小事!

编写程序

到这里,我似乎发现事情有些不对了!

image.png

上面说的cursor是一个"eyJ2IjoiNzAyMzU5NjI1MjkzNTc2NjA1MyIsImkiOjEyMH0=",这是个什么玩意,明显加密了啊!

于是,我开始尝试解密,看看加密前的是什么。我发现是通过Base64的方式进行加密的,哇,也太仗义了,我以为会是什么奇奇怪怪的加密方式,就到这走不下去了呢!

如下,解密出来是{"v":"7023596252935766053","i":100}字符串,根据我的经验来看,里面的i就是游标,代表着从那一条开始。 image.png 整明白了!开干!

代码实现

请求数据加密

def base64_encrypt(text):
    """
    base64加密
    :param text: 文本
    :return: 
    """
    encrypt = base64.b64encode(str(text).encode('utf-8'))
    return str(encrypt, "utf-8")

单页爬取测试

先把cursor数据内的i设置为0,爬取第一页测试一下:

import base64
import requests


def jujin_cat_spider():
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                      'Chrome/81.0.4044.43 Safari/537.36',
        'Referer': 'https://juejin.cn/'
    }
    url = "https://api.juejin.cn/content_api/v1/short_msg/list_by_theme?aid=2608&uuid=6983930498641806848"

    cursor = '{"v":"7023596252935766053","i":0}'

    cursor = base64_encrypt(cursor)
    print("加密后:", cursor)

    data = {
        "theme_id": "7007350783603638279",
        "sort": 1,
        "limit": 20,
        "cursor": cursor
    }
    res = requests.post(url, json=data, headers=headers)
    print(res.json())


jujin_cat_spider()

经测试,完美运行,可以得到第一页的数据,上面已经说过,返回体内的msg_Info里面的pic_list是猫的照片列表,循环所有的沸点数据,再循环照片列表把照片下载下来即可。

我感觉胜利就在眼前了,这里提前庆祝一下~
2021-05-12 125053.gif

翻页爬取

接下来唯一要做的就是构造翻页请求了,通过查看返回体,我看到有个has_more属性,代表着是否有下一页,那就好办了,判断一下就可以,如果有下一页,把cursor数据内的i加20,请求下一页的数据就行了,知道has_moreFslse停止。

运行过程截图: image.png

大功告成!! 共爬下来几百张猫猫的照片,下面是部分截图,看看有没有你家的哈哈哈! image.png

完整代码就不放了,毕竟我还要在掘金混的,万一造成不好的影响,啪!把我号一封!我以后还怎么在掘金摸鱼哈哈哈!

原创不易,如果小伙伴们觉得有帮助,麻烦点个赞再走呗~

最后,感谢女朋友在工作和生活中的包容、理解与支持 !