吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6932|回复: 19
收起左侧

[Python 原创] 【原创】爬取抖音gif表情包

[复制链接]
沧浪之水濯我心 发表于 2022-2-11 23:08
本帖最后由 沧浪之水濯我心 于 2022-2-12 00:12 编辑

某日,我刷到一个表情包视频,下载方法是抖音搜索“渣渣表情包”,输入某id,获取表情包。
我点进去一看,下载表情包还要看广告视频,这我能忍?
直接thor抓包

过程不表,直接说结论:
1.该功能(类似小程序),每个表情包作者都有一个编号,通过搜索编号可以浏览该表情包作者的所有gif
2.通过抓包可以直接获得gif地址
ps:该功能还提供了通过搜索图片标题来获取表情包。

代码思路:
1.我直接循环作者编号(0-999),当然我没测出来该功能所有的作者编号范围
2.从page 0 到 page i获取所有表情包,直到到头没有了
3.(通过表情包标题搜索我也写了个函数,大家可以自行调用以实现)

代码如下:
土豪链接(自行修改后缀为py): 获取抖音表情包.txt (4.27 KB, 下载次数: 76)

[Python] 纯文本查看 复制代码
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import urllib.request
import requests
import json
import os
from requests.packages.urllib3.exceptions import InsecureRequestWarning
import socket
#设置超时时间为30s
socket.setdefaulttimeout(30)
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
 
#请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 aweme_19.4.0 JsSdk/2.0 NetType/4G Channel/App Store ByteLocale/zh Region/CN AppTheme/light BytedanceWebview/d8a21c6 Aweme/19.4.0 Mobile ToutiaoMicroApp/2.40.0.1',
    'Content-Type': 'application/x-www-form-urlencoded',
    'Referer': 'https://tmaservice.developer.toutiao.com/?appid=ttca16bcab552fe68201&version=2.0.0',
    'Connection': 'keep-alive',
    'Host': 'zaza.guojiangdong.com.cn',
}
 
#通过标题搜索
# def SearchByTitle():
#     keyword = input("请输入表情包标题:\n")
#     data = {
#         'do': 'sousuo',
#         'keyword': keyword,
#         'page': '1',
#         'i': '2',
#         'c': 'entry',
#         'a': 'toutiaoapp',
#         'v': '1.0.0',
#         'm': 'mm_qu'
#     }
#     search_result = requests.post('https://zaza.guojiangdong.com.cn/app/index.php', headers=headers, data=data)
#     js = json.loads(search_result.text)
 
 
#通过id搜索,我直接遍历所有,你也可以改一下获取指定作者的表情包
def SearchById():
    # upid = input("请输入表情包up主编号:\n")
    for upid in range(0, 999):
        i = 0
        while i != -1:
            data = {
                'do': 'upimage',
                'upid': upid,
                'tid': '0',
                'page': i,
                'i': '2',
                'c': 'entry',
                'a': 'toutiaoapp',
                'v': '1.0.0',
                'm': 'mm_qu'
            }
            search_result = requests.post('https://zaza.guojiangdong.com.cn/app/index.php', headers=headers, data=data)
            js = json.loads(search_result.text)
             
            #实测第一页和其他页返回的json结构不一样
            try:
                listimg = js[0]['listimg']
            except:
                listimg = js
 
            try:
                i += 1
                GetGifById(upid, listimg)
            except:
                #报错就说明到底了
                i = -1
 
#获取gif地址
def GetGifById(upid, js):
    i = 0
    #这句代码是用来判断js是否为空的,不然为空不报错
    code=js[i]['img']
    for name in js:
        img = js[i]['img']
        name = js[i]['name']
        if "https" in img:
            url = img
        else:
            url = "https://zhage1.yayashijue.com/" + img
 
        GifDownload(upid, name, url)
        i += 1
 
#获取桌面文件夹
def get_desk_p():
    return os.path.join(os.path.expanduser('~'), "Desktop")
 
# 在桌面创建表情包文件夹,根据作者编号创建子文件夹,然后下载至该文件夹
def GifDownload(upid, name, url):
    desktop = get_desk_p() + "\\" + "表情包"
    folder_name = str(upid)
    filepath = os.path.join(desktop, folder_name)
    if not os.path.isdir(filepath):
        os.makedirs(filepath)
    img_name = name + ".gif"
    filename = filepath + "\\" + img_name
 
    try:
        urllib.request.urlretrieve(url, filename)
    except socket.timeout:
        count = 1
        while count <= 2:
            try:
                urllib.request.urlretrieve(url, filename)
                break
            except socket.timeout:
                count += 1
        if count > 2:
            print("downloading this gif fialed!")
 
 
if __name__ == "__main__":
    SearchById()


前文提到了还可以通过搜索表情包标题来获取表情包,我写了一个快捷指令,使用本快捷指令会在你的图库创建名为“表情包”的相簿,可以根据标题下载表情包到“表情包”相簿。(限IOS用户)
快捷指令链接:

快捷指令.txt (65 Bytes, 下载次数: 45)

最后放几张爬到的图片






免费评分

参与人数 4吾爱币 +4 热心值 +3 收起 理由
赵安之 + 1 热心回复!
李佑辰 + 1 + 1 用心讨论,共获提升!
yueyunlong + 1 + 1 用心讨论,共获提升!
crazy_hb + 1 + 1 能不能来个。。。那个。。黑丝大长腿的。。。

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 沧浪之水濯我心 发表于 2022-2-12 00:09
又测试了一下,发现urllib.request.urlretrieve偶尔会等待时间过长
解决方法:
import socket
#设置超时时间为30s
socket.setdefaulttimeout(30)

然后将urllib.request.urlretrieve(url, filename)替换为如下代码:


[Python] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
try:
    urllib.request.urlretrieve(url, filename)
except socket.timeout:
    count = 1
    while count <= 2:
        try:
            urllib.request.urlretrieve(url, filename)
            break
        except socket.timeout:
            count += 1
    if count > 2:
        print("downloading this gif fialed!")
Libra_c 发表于 2022-2-11 23:15
诅咒者之魂 发表于 2022-2-12 01:06
pzm102 发表于 2022-2-12 03:38
感谢分享
头像被屏蔽
richardzxq 发表于 2022-2-12 05:37
提示: 作者被禁止或删除 内容自动屏蔽
龍謹 发表于 2022-2-12 07:16
谢谢楼主分享思路,其实偶想扒微信的。
CCQc 发表于 2022-2-12 07:38
感谢分享
李佑辰 发表于 2022-2-12 09:24
不错,不错,学习到了
xia4166 发表于 2022-2-12 09:30
感谢分享!!!下载试试
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-4-4 10:45

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表