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

【爬虫软件】用Python开发的抖音关键词搜索工具,可筛选爬取热门视频、最新

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
一、背景介绍

1.1 爬取目标

用python开发的爬虫采集软件,可自动按关键词抓取抖音视频数据。
为什么有了源码还开发界面软件呢?方便不懂编程代码的小白用户使用,无需安装python,无需改代码,双击打开即用!
软件界面截图:

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

结果截图2:

结果截图3:

以上。
1.2 演示视频

软件运行演示视频:
请见原文
1.3 软件说明

几点重要说明:

以上。
二、代码讲解

2.1 爬虫采集模块

首先,定义接口地址作为请求地址:
  1. # 请求地址
  2. url = 'https://www.douyin.com/aweme/v1/web/search/item/'
复制代码
定义一个请求头,用于伪造浏览器:
  1. # 请求头
  2. h1 = {
  3.         "Accept": 'application/json, text/plain, */*',
  4.         "Accept-Encoding": "gzip, deflate",
  5.         "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
  6.         "Cookie": self.cookie_val,
  7.         "Referer": "",
  8.         "Sec-Ch-Ua": 'Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120',
  9.         "Sec-Ch-Ua-Mobile": "?0",
  10.         "Sec-Ch-Ua-Platform": "Windows",
  11.         "Sec-Fetch-Dest": "empty",
  12.         "Sec-Fetch-Mode": "cors",
  13.         "Sec-Fetch-Site": "same-origin",
  14.         "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
  15. }
复制代码
说明一下,cookie是个关键参数。
cookie的获取方法,如下:

这个值非常重要,软件界面需要填写!!
加上请求参数,告诉程序你的爬取条件是什么:
  1. # 请求参数
  2. params = {
  3.         "device_platform": "webapp",
  4.         "aid": "6383",
  5.         "channel": "channel_pc_web",
  6.         "search_channel": "aweme_video_web",
  7.         "sort_type": self.trans_sort_type(v_str=self.sort_type),
  8.         "publish_time": self.trans_time_range(v_str=self.time_range),
  9.         "keyword": search_keyword,
  10.         "search_source": "tab_search",
  11.         "query_correct_type": "1",
  12.         "is_filter_search": "1",
  13.         "from_group_id": "",
  14.         "offset": cursor,
  15.         "count": "20",
  16.         "pc_client_type": "1",
  17.         "version_code": "170400",
  18.         "version_name": "17.4.0",
  19.         "cookie_enabled": "true",
  20.         "screen_width": "1536",
  21.         "screen_height": "864",
  22.         "browser_language": "zh-CN",
  23.         "browser_platform": "Win32",
  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": "Windows",
  30.         "os_version": "10",
  31.         "cpu_core_num": "8",
  32.         "device_memory": "8",
  33.         "platform": "PC",
  34.         "downlink": "10",
  35.         "effective_type": "4g",
  36.         "round_trip_time": "50",
  37.         "webid": "7249265465250973217",
  38.         "msToken": "Sx2PzLIz0YGvM_wrIkaUaaeUb1JUutgo3ERiWmwV1w6VC1naW15lFM6N3nanMZRZYfaHLvXrDNzGqkAyvvCpdO3d6u0u_kNmmZZHeMIsDqga2eWnjTzp5g==",
  39.         "X-Bogus": "DFSzswVuketAN9oEt7PfdSlls7YT"
  40. }
复制代码
下面就是发送请求和接收数据:
  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. link_list = []  # 视频链接
  4. author_name_list = []  # 作者昵称
  5. author_id_list = []  # 抖音号
  6. author_link_list = []  # 作者链接
  7. follower_count_list = []  # 作者粉丝数
  8. create_time_list = []  # 发布时间
  9. like_count_list = []  # 点赞数
  10. comment_count_list = []  # 评论数
  11. collect_count_list = []  # 收藏数
  12. share_count_list = []  # 转发数
复制代码
循环解析字段数据,以"视频标题"为例:
  1. for v in video_list:
  2.         # 视频标题
  3.         title = v['aweme_info']['desc']
  4.         self.tk_show('视频标题:' + title)
  5.         title_list.append(title)
复制代码
其他字段同理,不再赘述。
最后,是把数据保存到csv文件:
  1. # 保存数据到DF
  2. df = pd.DataFrame(
  3.         {
  4.                 '关键词': search_keyword,
  5.                 '页码': page,
  6.                 '视频标题': title_list,
  7.                 '视频链接': link_list,
  8.                 '作者昵称': author_name_list,
  9.                 '抖音号': author_id_list,
  10.                 '作者链接': author_link_list,
  11.                 '作者粉丝数': follower_count_list,
  12.                 '发布时间': create_time_list,
  13.                 '点赞数': like_count_list,
  14.                 '评论数': comment_count_list,
  15.                 '收藏数': collect_count_list,
  16.                 '转发数': share_count_list,
  17.         }
  18. )
  19. if os.path.exists(self.result_file):  # 如果文件存在,不再设置表头
  20.         header = False
  21. else:  # 否则,设置csv文件表头
  22.         header = True
  23. df.to_csv(self.result_file, mode='a+', index=False, header=header, encoding='utf_8_sig')
  24. self.tk_show('保存csv文件成功:' + self.result_file)
复制代码
完整代码中,还含有:判断循环结束条件、排序方式(综合排序/最新发布/最多点赞)、发布时间(不限/一天内/一周内/半年内)等关键实现逻辑。
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=160)
  3. entry_kw = tk.Text(root, bg='#ffffff', width=60, height=2, )
  4. entry_kw.place(x=125, y=160, 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')
复制代码
日志文件截图:

以上。
三、转载声明

转载已获原作者 @马哥python说 授权:
博客园原文链接:【GUI软件】抖音搜索结果批量采集,支持多个关键词、排序方式、发布时间筛选等!

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

本帖子中包含更多资源

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

x

举报 回复 使用道具