翼度科技»论坛 编程开发 python 查看内容

【GUI软件】采集抖音博主的主页视频(可监控对标账号最新作品)

8

主题

8

帖子

24

积分

新手上路

Rank: 1

积分
24
目录

一、背景介绍

1.1 爬取目标

您好!我是@马哥python说,一名10年程序猿。
我用python开发了一个抖音爬虫采集软件,可自动按博主抓取其已发布视频数据。
为什么有了源码还开发界面软件呢?方便不懂编程代码的小白用户使用,无需安装python,无需改代码,双击打开即用!
软件界面截图:

爬取结果截图:
结果截图1:

结果截图2:

结果截图3:

以上。
1.2 演示视频

软件使用演示:(不懂编程没关系,了解软件的作用和使用方法就行)

1.3 软件说明

几点重要说明:

以上。
二、代码讲解

2.1 爬虫采集模块

首先,定义接口地址作为请求地址:
  1. # 请求地址
  2. url = 'https://www.douyin.com/aweme/v1/web/aweme/post/'
复制代码
定义一个请求头,用于伪造浏览器:
  1. # 请求头
  2. h1 = {
  3.         "Accept": "application/json, text/plain, */*",
  4.         "Accept-Encoding": "gzip, deflate",
  5.         "Accept-Language": "zh-CN,zh;q=0.9",
  6.         "Cookie": self.cookie_val,
  7.         "Priority": "u=1, i",
  8.         "Referer": "https://www.douyin.com/user/{}?vid=7325137998331399435".format(user_id),
  9.         "Sec-Ch-Ua": '"Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"',
  10.         "Sec-Ch-Ua-Mobile": "?0",
  11.         "Sec-Ch-Ua-Platform": "macOS",
  12.         "Sec-Fetch-Dest": "empty",
  13.         "Sec-Fetch-Mode": "cors",
  14.         "Sec-Fetch-Site": "same-origin",
  15.         "User-Agent": ua,
  16. }
复制代码
说明一下,cookie是个关键参数。
其中,cookie的获取方法,如下:

这个值非常重要,软件界面需要填写!!
加上请求参数,告诉程序你的爬取条件是什么:
  1. # 请求参数
  2. params = {
  3.         "device_platform": "webapp",
  4.         "aid": "6383",
  5.         "channel": "channel_pc_web",
  6.         "sec_user_id": user_id,
  7.         "max_cursor": max_cursor,
  8.         "locate_item_id": "7325137998331399435",
  9.         "locate_query": "false",
  10.         "show_live_replay_strategy": "1",
  11.         "need_time_list": "0",
  12.         "time_list_query": "0",
  13.         "whale_cut_token": "",
  14.         "cut_version": "1",
  15.         "count": 10,
  16.         "publish_video_strategy_type": "2",
  17.         "pc_client_type": "1",
  18.         "version_code": "170400",
  19.         "version_name": "17.4.0",
  20.         "cookie_enabled": "true",
  21.         "screen_width": "1440",
  22.         "screen_height": "900", "browser_language": "zh-CN",
  23.         "browser_platform": "MacIntel",
  24.         "browser_name": "Chrome",
  25.         "browser_version": "120.0.0.0",
  26.         "browser_online": "true",
  27.         "engine_name": "Blink",
  28.         "engine_version": "120.0.0.0",
  29.         "os_name": "Mac OS",
  30.         "os_version": "10.15.7",
  31.         "cpu_core_num": "4",
  32.         "device_memory": "8",
  33.         "platform": "PC",
  34.         "downlink": "1.35",
  35.         "effective_type": "3g",
  36.         "round_trip_time": "550",
  37.         "webid": "7312681406147921448",
  38.         "msToken": "Bjgl7yWKL7c57PFiwM6V4UWZ54Lm_eh4gjFdyOkX4xV93SpMHyyPMdO1u9j_OvsvgjtNNQFhaK9rWs2G8o7had3VtbDQuuaA41G3yFif70ssE_5ZnqQ6rg",
  39. }
复制代码
下面就是发送请求和接收数据:
  1. # 发送请求
  2. r = requests.get(url, headers=h1, params=params)
  3. print(r.status_code)
  4. # 以json格式接收返回数据
  5. json_data = r.json()
复制代码
定义一些空列表,用于存放解析后字段数据:
  1. # 定义空列表
  2. title_list = []  # 视频标题
  3. tag_list = []  # 视频标签
  4. link_list = []  # 视频链接
  5. author_name_list = []  # 作者昵称
  6. uid_list = []  # uid
  7. sec_uid_list = []  # sec_uid
  8. author_link_list = []  # 作者链接
  9. follower_count_list = []  # 作者粉丝数
  10. create_time_list = []  # 发布时间
  11. is_top_list = []  # 是否置顶
  12. like_count_list = []  # 点赞数
  13. comment_count_list = []  # 评论数
  14. collect_count_list = []  # 收藏数
  15. share_count_list = []  # 转发数
复制代码
循环解析字段数据,以"视频标题"为例:
  1. for v in video_list:
  2.         # 视频标题
  3.         title = v['desc']
  4.         self.tk_show('视频标题:' + title)
  5.         title_list.append(title)
复制代码
其他字段同理,不再赘述。
最后,是把数据保存到csv文件:
  1. # 保存数据到DF
  2. df = pd.DataFrame(
  3.         {
  4.                 '页码': page,
  5.                 '作者昵称': author_name_list,
  6.                 'uid': uid_list,
  7.                 'sec_uid': sec_uid_list,
  8.                 '作者链接': author_link_list,
  9.                 '作者粉丝数': follower_count_list,
  10.                 '视频标题': title_list,
  11.                 '视频标签': tag_list,
  12.                 '视频链接': link_list,
  13.                 '发布时间': create_time_list,
  14.                 '是否置顶': is_top_list,
  15.                 '点赞数': like_count_list,
  16.                 '评论数': comment_count_list,
  17.                 '收藏数': collect_count_list,
  18.                 '转发数': share_count_list,
  19.         }
  20. )
  21. if os.path.exists(self.result_file):  # 如果文件存在,不再设置表头
  22.         header = False
  23. else:  # 否则,设置csv文件表头
  24.         header = True
  25. df.to_csv(self.result_file, mode='a+', index=False, header=header, encoding='utf_8_sig')
  26. self.tk_show('保存csv文件成功:' + self.result_file)
复制代码
完整代码中,还含有:判断循环结束条件、js逆向参数、时间戳转换、判断置顶视频等关键实现逻辑。
2.2 软件界面模块

主窗口部分:
  1. # 创建主窗口
  2. root = tk.Tk()
  3. root.title('抖音博主视频采集软件v1.1 | 马哥python说 |')
  4. # 设置窗口大小
  5. root.minsize(width=850, height=650)
复制代码
输入控件部分:
  1. # 用户链接
  2. tk.Label(root, justify='left', text='用户链接:').place(x=30, y=125)
  3. entry_nt = tk.Text(root, bg='#ffffff', width=110, height=14, )
  4. entry_nt.place(x=30, y=150, anchor='nw')  # 摆放位置
复制代码
底部版权部分:
  1. # 版权信息
  2. copyright = tk.Label(root, text='@马哥python说 All rights reserved.', font=('仿宋', 10), fg='grey')
  3. copyright.place(x=290, y=625)
复制代码
以上。
2.3 日志模块

好的日志功能,方便软件运行出问题后快速定位原因,修复bug。
核心代码:
  1. def get_logger(self):
  2.         self.logger = logging.getLogger(__name__)
  3.         # 日志格式
  4.         formatter = '[%(asctime)s-%(filename)s][%(funcName)s-%(lineno)d]--%(message)s'
  5.         # 日志级别
  6.         self.logger.setLevel(logging.DEBUG)
  7.         # 控制台日志
  8.         sh = logging.StreamHandler()
  9.         log_formatter = logging.Formatter(formatter, datefmt='%Y-%m-%d %H:%M:%S')
  10.         # info日志文件名
  11.         info_file_name = time.strftime("%Y-%m-%d") + '.log'
  12.         # 将其保存到特定目录,ap方法就是寻找项目根目录,该方法博主前期已经写好。
  13.         case_dir = r'./logs/'
  14.         info_handler = TimedRotatingFileHandler(filename=case_dir + info_file_name,
  15.                                                 when='MIDNIGHT',
  16.                                                 interval=1,
  17.                                                 backupCount=7,
  18.                                                 encoding='utf-8')
复制代码
日志文件截图:

以上。
三、获取采集软件

完整exe采集软件,微信公众号"老男孩的平凡之路"后台回复"爬抖音博主软件"即可获取。点击直达
我是@马哥python说,一名10年程序猿,持续分享Python干货中!

来源:https://www.cnblogs.com/mashukui/p/18199359/douyin_post_tool
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具