|

13精币
.版本 2
.支持库 EThread
.支持库 spec
.支持库 iext
.程序集 窗口程序集_启动窗口
.程序集变量 是否停止, 逻辑型
.程序集变量 参数数组, 文本型, , "2"
.程序集变量 上次最新时间, 文本型
.程序集变量 关键词数组, 文本型, , "0"
.程序集变量 已采集链接, 文本型, , "0"
.子程序 __启动窗口_创建完毕
许可证 = 创建进入许可证 () ' 初始化许可证
是否停止 = 假
启动线程 (&定时任务, , ) ' 启动定时任务
' 初始化关键词数组
加入成员 (关键词数组, “1”)
加入成员 (关键词数组, “2”)
加入成员 (关键词数组, “3”)
.子程序 定时任务
.判断循环首 (取反 (是否停止))
_按钮1_被单击 () ' 执行爬取任务
延时 (10000) ' 延时 10 秒(10000 毫秒)
.判断循环尾 ()
.子程序 __启动窗口_将被销毁
是否停止 = 真 ' 停止定时任务
.子程序 网页采集所有
.参数 传入参数文本, 文本型
.局部变量 网址, 文本型
.局部变量 关键词, 文本型
.局部变量 返回数据, 文本型
.局部变量 网址参数, 整数型
.局部变量 网页中间文本, 文本型
.局部变量 批量数据数组, 文本型, , "0"
.局部变量 i, 整数型
.局部变量 评论内容, 文本型
.局部变量 索引, 整数型
.局部变量 主题时间, 文本型
.局部变量 是否最后一页, 逻辑型
.局部变量 最新时间, 文本型
.局部变量 专区, 文本型
.局部变量 链接, 文本型
.局部变量 局部参数数组, 文本型, , "0"
' 清空编辑框2的内容
编辑框2.内容 = “”
' 解析参数文本
局部参数数组 = 分割文本 (传入参数文本, “|”, ) ' 用 | 分隔关键词和页码
关键词 = 局部参数数组 [1] ' 第一个参数:关键词
网址参数 = 到整数 (局部参数数组 [2]) ' 第二个参数:页码
' 构造网址
网址 = “https://bbs.hupu.com/search?q=” + 关键词 + “&topicId=&sortby=general&page=” + 到文本 (网址参数)
' 访问网页并获取内容
返回数据 = UTF8到文本 (网页_访问_对象 (网址, , , , , , ))
' 检查是否最后一页
是否最后一页 = 寻找文本 (返回数据, “没有更多数据”, , 假) ≠ -1 ' 根据实际网页内容调整
.如果真 (是否最后一页)
调试输出 (“已到达最后一页,停止采集”)
返回 ()
.如果真结束
' 提取网页中间文本(缩小范围,提高效率)
网页中间文本 = 文本_取出中间文本 (返回数据, “并提供虎扑步行街社区服务”, “隐私协议”, )
' 显示网页内容到编辑框(用于调试)
编辑框2.内容 = 网页中间文本
' 批量提取评论块
文本_取中间_批量 (网页中间文本, “<div class=” + #引号 + “content-outline”, “</span></div>”, 批量数据数组, , , )
' 调试输出提取的评论块数量
调试输出 (“提取的评论块数量:”, 取数组成员数 (批量数据数组))
' 将提取的评论块数量写入编辑框2
编辑框2.加入文本 (“提取的评论块数量:” + 到文本 (取数组成员数 (批量数据数组)) + #换行符)
' 遍历每个评论块,提取评论内容
最新时间 = “” ' 初始化最新时间
.计次循环首 (取数组成员数 (批量数据数组), i)
进入许可区 (许可证) ' 进入线程安全区
' 提取评论内容
评论内容 = 文本_取出中间文本 (批量数据数组 [i], “>”, “</a>”)
' 去除 HTML 标签和其他无关内容
评论内容 = 去除HTML标签 (评论内容)
' 去除评论内容中的多余空格
评论内容 = 删首尾空 (评论内容) ' 去除首尾空格
评论内容 = 子文本替换 (评论内容, “ ”, “”, , , 真) ' 去除中间的空格
' 提取时间
主题时间 = 文本_取出中间文本 (批量数据数组 [i], “<span>”, “</span>”)
' 提取链接
链接 = 文本_取出中间文本 (批量数据数组 [i], “href=” + #引号, #引号)
' 检查链接是否已经采集过
.如果真 (是否已采集 (链接))
到循环尾 () ' 如果已经采集过,跳过该条数据
.如果真结束
' 记录已采集的链接
加入成员 (已采集链接, 链接)
' 更新最新时间
.如果真 (主题时间 > 最新时间)
最新时间 = 主题时间
.如果真结束
' 提取专区
专区 = 文本_取出中间文本 (批量数据数组 [i], “noreferrer” + #引号 + “>”, “</a>”)
' 设置评论内容
索引 = 超级列表框1.插入表项 (-1, 到文本 (i), , , , )
超级列表框1.置标题 (索引, 0, 到文本 (索引 + 1)) ' 设置序号
超级列表框1.置标题 (索引, 1, 评论内容)
超级列表框1.置标题 (索引, 2, 专区)
超级列表框1.置标题 (索引, 3, 主题时间)
超级列表框1.置标题 (索引, 4, 链接)
退出许可区 (许可证) ' 退出线程安全区
.计次循环尾 ()
' 检查是否有新数据
.如果真 (最新时间 > 上次最新时间)
上次最新时间 = 最新时间 ' 更新上次最新时间
提醒新数据 () ' 触发提醒
.如果真结束
.子程序 _超级列表框1_双击选择
.参数 横向位置, 整数型
.参数 纵向位置, 整数型
.局部变量 索引, 整数型
.局部变量 链接, 文本型
' 获取当前选中的行索引
索引 = 超级列表框1.现行选中项
' 检查索引是否有效
.如果真 (索引 = -1)
返回 () ' 如果未选中任何行,直接返回
.如果真结束
' 获取链接(假设链接在第 4 列)
链接 = 超级列表框1.取标题 (索引, 4)
' 检查链接是否为空
.如果真 (链接 = “”)
信息框 (“链接为空,无法复制!”, 0, “提示”, )
返回 ()
.如果真结束
' 复制链接到剪贴板
置剪辑板文本 (链接)
信息框 (“链接已复制到剪贴板:” + 链接, 0, “提示”, )
.子程序 是否已采集, 逻辑型
.参数 链接, 文本型
.局部变量 i, 整数型
.计次循环首 (取数组成员数 (已采集链接), i)
.如果真 (已采集链接 [i] = 链接)
返回 (真) ' 如果链接已经存在,返回真
.如果真结束
.计次循环尾 ()
返回 (假) ' 如果链接不存在,返回假
.子程序 提醒新数据
' 提醒用户有新数据
信息框 (“发现新数据,请查看!”, 0, “提醒”, )
.子程序 去除HTML标签, 文本型
.参数 文本, 文本型
.局部变量 结果, 文本型
.局部变量 i, 整数型
.局部变量 字符, 文本型
.局部变量 在标签内, 逻辑型
结果 = “”
在标签内 = 假
.计次循环首 (取文本长度 (文本), i)
字符 = 取文本中间 (文本, i, 1)
.如果真 (字符 = “<”)
在标签内 = 真
.如果真结束
.如果真 (字符 = “>”)
在标签内 = 假
到循环尾 ()
.如果真结束
.如果真 (取反 (在标签内)) ' 使用取反函数代替“不在标签内”
结果 = 结果 + 字符
.如果真结束
.计次循环尾 ()
返回 (结果)
.子程序 _按钮1_被单击
.局部变量 据页数, 整数型
.局部变量 几次, 整数型
.局部变量 关键词索引, 整数型
.局部变量 线程参数文本, 文本型
据页数 = 到整数 (编辑框页数.内容)
' 遍历所有关键词,启动多线程采集
.计次循环首 (取数组成员数 (关键词数组), 关键词索引)
.计次循环首 (据页数, 几次)
线程参数文本 = 关键词数组 [关键词索引] + “|” + 到文本 (几次) ' 用 | 分隔关键词和页码
启动线程 (&网页采集所有, 线程参数文本, ) ' 传递封装后的参数文本
延迟 (1000) ' 延迟 1 秒,避免请求过快
.计次循环尾 ()
.计次循环尾 ()
启动线程 (&网页采集所有, 线程参数文本, ) ' 传递封装后的参数文本 一直显示这段错了 不知道怎么该了 就是显示这行错误妈的 来个大哥看看吧 搞一晚上都不知道
|
|