抖音采集视频作品评论、昵称、uid、和评论者二维码,易语言开源版

发布时间 2023-11-17 12:34:07作者: 新壳软件

用超级列表支持库,不调用浏览器内核就实现的一个抖音采集视频作品评论提取工具,不需要借助任何浏览器内核,也不属于调表类的提取,只用到一个“超级列表框_EXCEL_导入导出模块.ec”模块和“精易模块[v8.2.0].ec”模块就能实现,软件整个框架爱和功能我都设计好了,只需要运行,输入关键词即可直接提取,多余的我没开发,你可以进行二次开发,我这边只把源码和所需要的DLL命令,变量完整的分享出来。

框架图:

 

常量:

================================================

.版本 2

 

.常量 提取评论, "<文本长度: 18>"

.常量 提取昵称, "<文本长度: 20>"

.常量 提取时间, "<文本长度: 20>"

.常量 提取首页, "<文本长度: 41>"

.常量 协议头, "<文本长度: 271>"

.常量 取所有评论代码, "<文本长度: 54>"

.常量 分割所有评论, "<文本长度: 54>"

.常量 去除作者评论, "<文本长度: 27>"

.常量 取日期前, "<文本长度: 21>"

.常量 取日期后, "<文本长度: 4>"

.常量 匹配个人主页UId, "<文本长度: 33>"

.常量 拦截提取全部评论, "<文本长度: 33>"

.常量 获取电脑主页链接, "<文本长度: 22>"

.常量 二维码前缀, "<文本长度: 37>"

================================================

程序集代码:

==================================================

.版本 2

.支持库 edroptarget

.支持库 wke

.支持库 iext

.支持库 cjtb

.支持库 CnCalendar

.支持库 e2ee

 

.程序集 窗口程序集_启动窗口

 

.子程序 __启动窗口_创建完毕

.局部变量 sss, 字节集

 

拖放对象1.注册拖放控件 (超列URL.取窗口句柄 ())

拖放对象1.接收文件 = 真

精易Web浏览器1.浏览网页 (“https://www.douyin.com/”)

获取UID (“www.douyin.com/user/MS4wLjABAAAA3J6qKWlr4ird4u18T638qKKY8zpZ977Cj40TIEfmvzuqvCVaaw-AF7V0LQEsyIdT”)

 

 

.子程序 获取数量啊, 文本型

 

 

返回 (到文本 (超级列表框1.取表项数 ()))

 

 

.子程序 _精易Web浏览器1_Url载入开始, 逻辑型, , '梦远网络工作室版权所有

.参数 Url, 文本型

.参数 Job, 整数型

.局部变量 f, 特殊功能

.局部变量 请求动作, 整数型

.局部变量 临时文本, 文本型

.局部变量 p, POST元素集

.局部变量 i, 整数型

 

请求动作 = f.取请求模式 (Job)

 

.如果真 (请求动作 = 1) ' get

  .如果真 (寻找文本 (Url, “www.douyin.com/aweme/v1/web/comment/list/?device_platform=webapp”, , 假) > 0)

    f.拦截网络请求 (Job)

 

  .如果真结束

 

  .如果真 (寻找文本 (Url, “www.douyin.com/aweme/v1/web/comment/list/?device_platform=webapp”, , 假) > -1)

    f.拦截网络请求 (Job)

 

  .如果真结束

 

.如果真结束

 

 

 

 

 

 

.子程序 _精易Web浏览器1_Url载入结束, 逻辑型, , '梦远网络工作室版权所有

.参数 Url, 文本型

.参数 Job, 整数型

.参数 数据字节集指针, 整数型

.参数 数据长度, 整数型

.局部变量 字节集, 字节集

.局部变量 f, 特殊功能

.局部变量 gg, 文本型, , "0"

.局部变量 i, 整数型

.局部变量 返回文本, 文本型

.局部变量 正则表达式, 正则表达式类

.局部变量 获取数据, 正则表达式类

.局部变量 w, 整数型

.局部变量 第一次数据, 文本型

.局部变量 评论内容, 文本型

.局部变量 评论昵称, 文本型

.局部变量 提取时间, 文本型

.局部变量 json, 类_json

.局部变量 作者回复, 逻辑型

.局部变量 主页链接, 文本型

.局部变量 回复数量, 文本型

.局部变量 回复数据, 文本型

.局部变量 二维码ID, 文本型

.局部变量 过滤分割, 文本型, , "0"

.局部变量 t, 整数型

.局部变量 过滤, 逻辑型

 

字节集 = 指针到字节集 (数据字节集指针, 数据长度) ' 取出拦截

.判断开始 (Url = “www.douyin.com/aweme/v1/web/comment/list/?device_platform=webapp”)

 

 

.默认

 

  返回文本 = 编码_Utf8到Ansi (字节集)

 

  json.解析 (返回文本)

 

  .计次循环首 (json.成员数 (“comments”), w)

    ' 梦远网络工作室版权所有

    连续赋值 (“”, 评论内容, 评论昵称, 提取时间, 主页链接, 回复数量)

    作者回复 = 假

    过滤 = 假

    评论内容 = json.取通用属性 (“comments[” + 到文本 (w - 1) + “].text”, )

    评论昵称 = json.取通用属性 (“comments[” + 到文本 (w - 1) + “].user.nickname”, )

    提取时间 = json.取属性 (“comments[” + 到文本 (w - 1) + “]['create_time']”).取数据文本 ()

    提取时间 = 时间_时间戳转文本 (提取时间)

    提取时间 = 格式化日期 (到时间 (提取时间), “%y.%m.%d”)

    二维码ID = json.取通用属性 (“comments[” + 到文本 (w - 1) + “].user.uid”, )

    主页链接 = json.取通用属性 (“comments[” + 到文本 (w - 1) + “].user['sec_uid']”, )

    回复数据 = json.取属性 (“comments[” + 到文本 (w - 1) + “]['reply_comment']”).取数据文本 ()

 

    .如果真 (寻找文本 (回复数据, “作者”, , 假) ≠ -1)

      作者回复 = 真

    .如果真结束

 

 

    过滤分割 = 分割文本 (编辑框过滤词语.内容, “,”, )

    .计次循环首 (取数组成员数 (过滤分割), t)

 

      .如果真 (寻找文本 (回复数据, 过滤分割 [t], , 假) ≠ -1 或 寻找文本 (评论昵称, 过滤分割 [t], , 假) ≠ -1)

        过滤 = 真

        跳出循环 ()

      .如果真结束

 

      程序_延时 (10, )

    .计次循环尾 ()

 

    .如果真 (过滤 = 假)

 

      .如果 (选择过滤回复.选中 = 真)

        .如果真 (作者回复 = 假)

          采集添加 (评论昵称, 评论内容, 提取时间, , 作者回复, #二维码前缀 + 二维码ID)

        .如果真结束

 

      .否则

        采集添加 (评论昵称, 评论内容, 提取时间, , 作者回复, #二维码前缀 + 二维码ID)

      .如果结束

 

    .如果真结束

 

    程序_延时 (50, )

  .计次循环尾 ()

  json.清除 ()

  _启动窗口.标题 = “当前数量:” + 获取数量啊 ()

  程序_延时 (10, )

  继续到底 = 真

 

.判断结束

 

 

 

.子程序 采集添加

.参数 昵称, 文本型

.参数 评论, 文本型

.参数 时间, 文本型

.参数 抖音号, 文本型, 可空

.参数 作者回复, 逻辑型, 可空

.参数 链接, 文本型, 可空

.局部变量 索引, 整数型

 

.如果真 (超级列表框1.查找表项 (链接, , , 0) = -1)

  索引 = 超级列表框1.插入表项 (, , , , , )

  超级列表框1.置标题 (索引, 0, 链接)

  超级列表框1.置标题 (索引, 1, 昵称)

  超级列表框1.置标题 (索引, 2, 评论)

  超级列表框1.置标题 (索引, 3, 时间)

  超级列表框1.置标题 (索引, 4, 抖音号)

  超级列表框1.置标题 (索引, 5, 选择 (作者回复 = 真, “已回”, “暂未回复”))

  超级列表框1.保证显示 (索引)

 

.如果真结束

 

 

 

.子程序 _按钮2_被单击

.局部变量 首页数据, 文本型

.局部变量 正则表达式, 正则表达式类

.局部变量 提取评论, 正则表达式类

.局部变量 获取评论, 正则表达式类

.局部变量 去除作者, 正则表达式类

.局部变量 w, 整数型

.局部变量 取到所有评论数据, 文本型

.局部变量 评论数据, 文本型

.局部变量 评论内容, 文本型

.局部变量 评论昵称, 文本型

.局部变量 日期, 文本型

.局部变量 作者已回, 逻辑型

.局部变量 循环开始, 逻辑型

.局部变量 javaScript, Javascript

.局部变量 js执行状态, 整数型

.局部变量 值对象, 长整数型

.局部变量 是否到底, 逻辑型

.局部变量 获取主页链接, 正则表达式类

.局部变量 o, 整数型

.局部变量 视频URL地址, 文本型

.局部变量 电脑主页链接, 文本型

.局部变量 用户UID, 文本型

.局部变量 过滤分割, 文本型, , "0"

.局部变量 t, 整数型

.局部变量 过滤, 逻辑型

 

' 梦远网络工作室版权所有

按钮2.标题 = “采集中”

按钮2.禁止 = 真

超级列表框1.全部删除 ()

 

 

.计次循环首 (超列URL.取表项数 (), o)

  视频URL地址 = 超列URL.取标题 (o - 1, 1)

  超列URL.置标题 (o - 1, 2, “获取中”)

 

 

  程序_延时 (5, )

  精易Web浏览器1.浏览网页 (视频URL地址)

 

  .计次循环首 (10, )

    .如果真 (精易Web浏览器1.是否加载完成 ())

      跳出循环 ()

    .如果真结束

 

    程序_延时 (2000, )

  .计次循环尾 ()

  ' 信息框 (“开始采集了”, 0, , )

  程序_延时 (1000, )

  首页数据 = wke_Utf8ToAnsi (精易Web浏览器1.取网页源码 (, , , ))

  ' 调试输出 (首页数据)

  正则表达式.创建 (#取所有评论代码, 首页数据, , , , )

  取到所有评论数据 = 正则表达式.取子匹配文本 (1, 1, )

  提取评论.创建 (#分割所有评论, 取到所有评论数据, , , , )

  ' 置剪辑板文本 (首页数据)

  .计次循环首 (提取评论.取匹配数量 (), w)

    连续赋值 (“”, 评论昵称, 评论内容, 日期)

    作者已回 = 假

    过滤 = 假

 

    评论数据 = 提取评论.取子匹配文本 (w, 1, )

 

    .如果真 (寻找文本 (评论数据, “作者”, , 假) ≠ -1)

      ' 调试输出 (“找到作者”)

      作者已回 = 真

 

      去除作者.创建 (#去除作者评论, 评论数据, , , , )

      评论数据 = 去除作者.取子匹配文本 (1, 1, ) ' 梦远网络工作室版权所有

    .如果真结束

 

    ' 调试输出 (评论数据)

 

 

 

    获取评论.创建 (#提取首页, 评论数据, , , , )

    评论昵称 = 获取评论.取子匹配文本 (1, 1, )

    评论内容 = 获取评论.取子匹配文本 (获取评论.取匹配数量 (), 1, )

    获取主页链接.创建 (#获取电脑主页链接, 评论数据, , , , )

    电脑主页链接 = 获取主页链接.取子匹配文本 (1, 1, )

    用户UID = 获取UID (电脑主页链接)

    日期 = 文本_取出中间文本 (评论数据, #取日期前, #取日期后, , )

    过滤分割 = 分割文本 (编辑框过滤词语.内容, “,”, )

 

 

    .计次循环首 (取数组成员数 (过滤分割), t)

 

      .如果真 (寻找文本 (评论数据, 过滤分割 [t], , 假) ≠ -1 或 寻找文本 (评论昵称, 过滤分割 [t], , 假) ≠ -1)

        过滤 = 真

        跳出循环 ()

 

      .如果真结束

 

      程序_延时 (10, )

    .计次循环尾 ()

 

 

    .如果真 (过滤 = 假)

      .如果 (选择过滤回复.选中 = 真)

        .如果真 (作者已回 = 假)

          采集添加 (评论昵称, 评论内容, 日期, , 作者已回, #二维码前缀 + 用户UID)

        .如果真结束

 

      .否则

        采集添加 (评论昵称, 评论内容, 日期, , 作者已回, #二维码前缀 + 用户UID)

 

      .如果结束

 

 

    .如果真结束

 

    程序_延时 (5, )

  .计次循环尾 ()

 

  继续到底 = 真

  循环开始 = 真

  .判断循环首 (循环开始)

    .' 如果真 (继续到底 = 真)

      ' javaScript.运行JS_值对象 (精易Web浏览器1.取WebView (), “window.scrollTo(100,document.body.scrollHeight)”)

      ' 继续到底 = 假

    .如果真结束

 

 

 

 

 

    js执行状态 = javaScript.取JS执行状态 (精易Web浏览器1.取WebView ())

    值对象 = javaScript.运行JS_值对象 (精易Web浏览器1.取WebView (), “return(document.documentElement.scrollTop||document.body.scrollTop)+(document.documentElement.clientHeight||document.body.clientHeight)===(document.documentElement.scrollHeight||document.body.scrollHeight)”)

    是否到底 = javaScript.取执行结果到逻辑 (js执行状态, 值对象)

    .如果真 (继续到底 = 真)

      javaScript.运行JS_值对象 (精易Web浏览器1.取WebView (), “window.scrollTo(100,document.body.scrollHeight)”)

      继续到底 = 假

 

 

    .如果真结束

 

 

 

    javaScript.垃圾回收 ()

    首页数据 = wke_Utf8ToAnsi (精易Web浏览器1.取网页源码 (, , , ))

    .如果真 (寻找文本 (首页数据, “暂时没有更多评论”, , 假) ≠ -1)

 

      跳出循环 ()

    .如果真结束

    .如果真 (寻找文本 (首页数据, “部分评论因未授权抖音”, , 假) ≠ -1)

      ' 信息框 (“部分评论因未授权抖音,请登录尝试获取”, 0, , )

      跳出循环 ()

 

    .如果真结束

 

 

    精易Web浏览器1.延时回收垃圾 (1000)

    程序_延时 (3000, )

  .判断循环尾 ()

  超列URL.置标题 (o - 1, 2, “OK”)

 

  程序_延时 (1000, )

.计次循环尾 ()

按钮2.标题 = “开始采集”

按钮2.禁止 = 假

 

信息框 (“采集完成”, 0, , )

 

.子程序 _按钮开始采集_被单击

 

 

 

.子程序 获取UID, 文本型

.参数 电脑主页链接, 文本型

.局部变量 浏览器句柄, 整数型

.局部变量 返回文本, 文本型

.局部变量 正则表达式, 正则表达式类

.局部变量 w, 整数型

.局部变量 uid, 文本型

.局部变量 json, 类_json

.局部变量 json数据, 文本型

 

返回文本 = 编码_Utf8到Ansi (网页_访问_对象 (“https://” + 电脑主页链接, 1, , , , , , , , , , , , , , , , , ))

' 调试输出 (返回文本)

json数据 = URL解码 (返回文本, )

' 置剪辑板文本 (json数据)

 

正则表达式.创建 (#匹配个人主页UId, json数据, , , , )

uid = 正则表达式.取子匹配文本 (正则表达式.取匹配数量 (), 1, )

 

' 调试输出 ()

 

返回 (uid)

 

.子程序 _按钮保存评论_被单击

.局部变量 导出文本, 文本型

 

通用对话框2.过滤器 = “文本文件(*.txt)”

.如果真 (通用对话框2.打开 ())

  导出文本 = 编辑框1.内容

  写到文件 (通用对话框2.文件名, 到字节集 (导出文本))

 

.如果真结束

 

 

.子程序 _拖放对象1_得到文件

.参数 接收到的文件路径, 文本型

.局部变量 接收数据, 文本型

.局部变量 分割数组, 文本型, , "0"

.局部变量 i, 整数型

.局部变量 sy, 整数型

 

 

' 调试输出 (接收到的文件路径)

超列URL.全部删除 ()

 

接收数据 = 到文本 (读入文件 (接收到的文件路径))

 

分割数组 = 分割文本 (接收数据, #换行符, )

 

.计次循环首 (取数组成员数 (分割数组), i)

  sy = 超列URL.插入表项 (, 到文本 (超列URL.取表项数 () + 1), , , , )

  超列URL.置标题 (sy, 1, 分割数组 [i])

 

 

  程序_延时 (10, )

.计次循环尾 ()

 

.子程序 _超级列表框1_被双击, 逻辑型

.参数 横向位置, 整数型

.参数 纵向位置, 整数型

.参数 功能键状态, 整数型

 

 

置剪辑板文本 (超列URL.取标题 (超列URL.现行选中项, 5))

 

.子程序 __启动窗口_将被销毁

 

结束 ()

 

 

.子程序 _按钮1_被单击

 

按钮1.标题 = “导出中”

按钮1.禁止 = 真

.如果 (超级列表框_EXCEL_导出 (超级列表框1, , , , , , , , , , ))

  按钮1.标题 = “导出数据”

  按钮1.禁止 = 假

  信息框 (“导出成功”, 0, , )

.否则

  按钮1.标题 = “导出数据”

  按钮1.禁止 = 假

  信息框 (“导出成功”, 0, , )

.如果结束

 

 

.子程序 _选择夹1_被单击

 

 

 

.子程序 _超级列表框1_左键单击表项

.局部变量 二维码链接, 文本型

.局部变量 二维码返回结果, 字节集

.局部变量 二维码数据, 文本型

.局部变量 正则, 正则表达式类

 

' https://cli.im/api/qrcode/code?text=%2F%2Fcli.im&mhid=thfFXwC9zp0hMHYrLdNQPqk

二维码链接 = 超级列表框1.取标题 (超级列表框1.现行选中项, 0)

二维码链接 = “https://cli.im/api/qrcode/code?text=” + URL编码 (二维码链接, ) + “&mhid=thfFXwC9zp0hMHYrLdNQPqk”

' 调试输出 (二维码链接)

二维码返回结果 = 网页_访问_对象 (二维码链接, 1, , , , , , , , , , , , , , , , , )

' 二维码返回结果 = 网页_GZIP解压 (二维码返回结果)

二维码数据 = 到文本 (二维码返回结果)

' 置剪辑板文本 (二维码数据)

正则.创建 (“var qrcode_plugins_img =#引号//([\s\S]*?)#引号”, 二维码数据, 假, 假, 真, 真)

' 调试输出 (正则.取子匹配文本 (正则.取匹配数量 (), 1, ))

二维码预览.图片 = 网页_访问_对象 (“https://” + 正则.取子匹配文本 (正则.取匹配数量 (), 1, ), 1, , , , , , , , , , , , , , , , , )

 

 

.子程序 _超级列表框1_当前表项被改变

 

====================================================