前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 源代码 | 2024 版抖音评论采集爬虫

Python 源代码 | 2024 版抖音评论采集爬虫

作者头像
月小水长
发布2024-01-12 15:53:03
3.7K6
发布2024-01-12 15:53:03
举报
文章被收录于专栏:月小水长月小水长

欢迎关注公众号「月小水长」,唯一笔者是 BuyiXiao,又名小布衣、肖不已。 BuyiXiao,何许人也?本衡州一乡野村夫,身高八尺不足,年方二十有余;弱冠之年曾求学于潭州,为谋生计,背井离乡,远赴京畿,我本南人,不习北土,兼有故友,威逼利诱,急于星火,遂下岭南,打工未半,中道创业,所为何业?赛博朋克,智能硬件;假工程师之名,行农民工之实,满腹经纶,无用书生,善于自黑,贻笑大方。 另外,文末点下「」和「在看」,这样每次新文章推送,就会第一时间出现在你的订阅号列表里。

当时的重点只是讲 hook 这种方法,并不是采集抖音评论,有点为了这瓶醋包了这碗饺子的意思在里面。

而且收到不少反馈说配置麻烦,于是就有了今天这期使用纯 Python 采集抖音评论,配置相对简单。

目标站点还是抖音网页版,其实抖音网页评论没啥反爬,访问接口时携带登录 cookie 和适当休眠时间即可获取到数据,然后使用返回数据里面的 cursor 获取下一页的偏移量(一般是 20)来控制翻页。

下面就以下面这个视频为例,简述下如何获取 cookie

https://www.douyin.com/video/7314079677939830068

1、在 Chrome 浏览器中打开上面这个视频地址。

2、F12 或者右键检(审)查打开网页开发者工具,切换到 Network 栏。

3、点开视频评论区,在 Network 栏下找到请求 web/comment/list/,点击,复制请求的 Headers(Cookie) 和 Payload(Params)。

虽然已经说了很多次,但是考虑到新手友好,这个请求 cookie 的复制我还是多说一嘴,如果觉得上面流程不明白的,建议先百度学习下 F12 开发者工具的使用,5 分钟就能搞定。

走完上面流程,你应该得到的 headers 和 params 格式如下:

代码语言:javascript
复制
headers = {
    'authority': 'www.douyin.com',
    'accept': 'application/json, text/plain, */*',
    'accept-language': 'zh-CN,zh;q=0.9,en-CN;q=0.8,en;q=0.7,es-MX;q=0.6,es;q=0.5',
    'cookie': '替换成你自己的 cookie',
    'referer': 'https://www.douyin.com/user/MS4wLjABAAAAlfFujj6wKxN1TqrqqJu4XBaZqek6XwvvA_afAojNvWr1E4ZO_nadPC1Ku7XMpzfj?modal_id=7316808340519030055',
    'sec-ch-ua': '"Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"Windows"',
    'sec-fetch-dest': 'empty',
    'sec-fetch-mode': 'cors',
    'sec-fetch-site': 'same-origin',
    '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',
}

params = {
        'device_platform': 'webapp',
        'aid': '6383',
        'channel': 'channel_pc_web',
        'cursor': '0',
        'count': '20',
        'item_type': '0',
        'insert_ids': '',
        'whale_cut_token': '',
        'cut_version': '1',
        'rcFT': '',
        'pc_client_type': '1',
        'version_code': '170400',
        'version_name': '17.4.0',
        'cookie_enabled': 'true',
        'screen_width': '1707',
        'screen_height': '960',
        'browser_language': 'zh-CN',
        'browser_platform': 'Win32',
        'browser_name': 'Chrome',
        'browser_version': '120.0.0.0',
        'browser_online': 'true',
        'engine_name': 'Blink',
        'engine_version': '120.0.0.0',
        'os_name': 'Windows',
        'os_version': '10',
        'cpu_core_num': '16',
        'device_memory': '8',
        'platform': 'PC',
        'downlink': '10',
        'effective_type': '4g',
        'round_trip_time': '150',
        'webid': 'xxx替换',
        'msToken': 'yyy替换',
        'X-Bogus': 'zzz替换',
    }

一般来说,只需要替换代码中 headers 的 cookie 和 params 中的xxx、yyy、zzz ,其余部分可保持不变。

有了 headers 和 params,就可以很方便地请求数据了,核心请求+翻页逻辑代码如下:

代码语言:javascript
复制
while True:
    root_params['cursor'] = cursor
    response = requests.get('https://www.douyin.com/aweme/v1/web/comment/list/', params=root_params,
                            headers=headers)
    resp_json = response.json()
    save_comments(resp_json, result_file)
    cursor = str(resp_json['cursor'])
    has_more = int(resp_json['has_more'])
    if has_more <= 0:
        print_with_time('root has no more')
        break
    sleep(slp_per_req)

其中 save_comments 是解析保存数据到 csv 文件,核心代码如下:

代码语言:javascript
复制
def save_comments(json_data, result_file):
    comments = json_data.get('comments', None)
    if not comments or len(comments) == 0:
        return
    if os.path.exists(result_file):
        df = pd.read_csv(result_file)
    else:
        save_cols = ['aweme_id', 'cid', 'create_time', 'digg_count', 'is_author_digged', 'reply_comment_total',
                     'ip_location', 'text', 'reply_id', 'reply_to_reply_id', 'reply_to_username', 'reply_to_userid',
                     'userid', 'user_name', 'signature', 'verification_type', 'verify_info', 'user_short_id']
        df = pd.DataFrame({key: [] for key in save_cols})
    for comment in comments:
        # to_parse_a_comment

采集完根评论后,几乎只需要在参数字典中新增comment_id 为根评论 id,就可以采集根评论的回复了,其请求翻页逻辑完全可以复用根评论请求,保存逻辑亦然。

实测单条视频最多可以采集到 几千-上万评论,10w+ 尚未测试,最后解析保存的字段有评论 id、回复的根评论 id(为 0 表示本身是根评论)、回复的二级评论 id(为 0 表示本身是根评论)、评论内容、评论时间、ip 属地、点赞数、回复数、评论用户名等等十余个字段,结果 csv 如下图所示:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-01-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 月小水长 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CLI 工具
云开发 CLI 工具(Cloudbase CLI Devtools,CCLID)是云开发官方指定的 CLI 工具,可以帮助开发者快速构建 Serverless 应用。CLI 工具提供能力包括文件储存的管理、云函数的部署、模板项目的创建、HTTP Service、静态网站托管等,您可以专注于编码,无需在平台中切换各类配置。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档