GameMale
登陆 / 注册 搜索

USERCENTER

SEARCHSITE

搜索

查看: 1232|回复: 33
收起左侧

[功能优化] 【油猴脚本】帖子内容提取 活动员会用到的妙妙工具

  [复制链接] |关注本帖

SCP-s-1889-第二页虚空之海的鲸裸体克里斯圣甲虫秘典『随时随地开启!』被释放的灵魂『随时随地开启!』无尽的怀表缘起星空男巫之歌

     楼主| 星之子 发表于 2024-10-3 06:02:46 | 显示全部楼层 |阅读模式 |取消关注该作者的回复
    本帖最后由 星之子 于 2024-10-3 06:05 编辑
    动机
    最近想收集一下周年庆【星辰降临】活动的绝版勋章发放数据,然后在勋章公会发个帖子——但工作量确实很大,回帖格式也没有完全规范,真要一页一页整理还不如直接嘎了我。另外也是受到了 @墨燝 老师写的 活动内容爬取工具 (表格版) 的启发,所以就调教GPT写了这个脚本(感觉自己好像那种赛博奴隶主,天天压榨GPT这个赛博奴隶这是可以说的吗)。

    功能

    仅在形如 https://www.gamemale.com/thread-*(帖子ID)-*(页码)-1.html 的网站中生效:
    • 按下快捷键Ctrl+Y后,自动提取当前页面上所有回帖的作者UID及其回帖内容(忽略格式,仅提取纯文本)
    • 这些内容将会被合并为一行,换行将被替换为用户指定的特定符号(默认全角分号,可在代码中修改)
    • 将内容每行一个,合并为“extracted_text-帖子ID-页码.txt”下载到本地
    • 然后跳转到帖子的下一页,方便再次按下快捷键Ctrl+Y,进行下一次提取
    重复上述过程,直至帖子的最后一页。

    优点:
    • 简单易行门槛低,无需提取cookie和运行python
    • 抗干扰性强,忽略格式提取所有回帖的文本内容
    • 适用范围更广,无需特定格式也可提取
    • 访问量相对合理(相当于手动浏览一遍帖子,速度不会很快但也够用,3秒按一次快捷键相当于1分钟20页)
    • 可以选择是否提取“本帖最后由 someone 于 yyyy-m-d hh:mm 编辑”信息(默认忽略,可在代码中修改)

    缺点:
    • 导出结果一页一个.txt,需要借助其它工具合并
    • 需要善用Excel的数据-分列功能自行补足成表格



    代码

    @Name
    1. // ==UserScript==
    2. // @name         看帖:活动员神器 帖子内容提取
    3. // @namespace    https://www.gamemale.com/space-uid-733330.html
    4. // @version      2.1
    5. // @description  忽略格式提取所有回帖的文本内容,将换行用指定分隔符代替,并前缀UID,每回帖一行,并按照当前页码命名
    6. // @author       Étoiles
    7. // @match        https://www.gamemale.com/thread-*-*-1.html
    8. // @icon         https://www.google.com/s2/favicons?sz=64&domain=gamemale.com
    9. // @grant        none
    10. // ==/UserScript==

    11. (function () {
    12.     'use strict';
    13.     //在这里调整是否忽略“本帖最后由 someone 于 yyyy-m-d hh:mm 编辑” 开启:1 关闭:0
    14.     const IGNORE_PSTATUS = 1;

    15.     //在这里修改触发按钮,默认Ctrl+Y
    16.     document.addEventListener('keydown', function (event) {
    17.         if (event.ctrlKey && event.key === 'y') {

    18.             let elements = document.querySelectorAll('td.t_f, div.authi');
    19.             let contentArray = [];
    20.             let currentAuthorId = '';

    21.             elements.forEach(function (element) {
    22.                 if (element.classList.contains('authi')) {
    23.                     let authorElement = element.querySelector('a[href*="space-uid-"]');
    24.                     if (authorElement) {
    25.                         let authorIdMatch = authorElement.href.match(/space-uid-(\d+)\.html/);
    26.                         if (authorIdMatch) {
    27.                             //这里的★只是一个标识符,方便确认这是脚本自动添加的UID而非回复内容里的
    28.                             currentAuthorId = `★${authorIdMatch[1]}`;
    29.                         }
    30.                     }
    31.                 } else if (element.classList.contains('t_f')) {
    32.                     let clone = element.cloneNode(true);

    33.                     //忽略 <i class="pstatus"> 本帖最后由 someone 于 yyyy-m-d hh:mm 编辑 </i> 和紧随其后的<br>
    34.                     if (IGNORE_PSTATUS) {
    35.                         let pstatusElements = clone.querySelectorAll('i.pstatus');
    36.                         pstatusElements.forEach(function (pstatusElement) {
    37.                             let nextSibling = pstatusElement.nextSibling;
    38.                             for (let i = 0; i < 2; i++) {
    39.                                 if (nextSibling && nextSibling.nodeName === 'BR') {
    40.                                     let toRemove = nextSibling;
    41.                                     nextSibling = nextSibling.nextSibling;
    42.                                     toRemove.remove();
    43.                                 }
    44.                             }
    45.                             pstatusElement.remove();
    46.                         });
    47.                     }


    48.                     //脚本会把一个用户的帖子合并为一行,将换行符替换为某个特定分隔符
    49.                     //在这里可以调整分隔符,默认是半角分号(感觉这个分号不常用)可在 ↓ 这里修改
    50.                     let textContent = clone.innerHTML.replace(/<br\s*\/?>/gi, ';').replace(/<[^>]+>/g, '').replace(/^\s*;/g, '').replace(/\s+/g, ' ').trim();
    51.                     if (currentAuthorId) {
    52.                         textContent = currentAuthorId + ';' + textContent;
    53.                         currentAuthorId = ''; // Reset after using
    54.                     }
    55.                     contentArray.push(textContent);
    56.                 }
    57.             });

    58.             //基于当前帖子ID和页码给文件命名
    59.             let currentUrl = window.location.href;
    60.             let match = currentUrl.match(/thread-(\d+)-(\d+)-(\d+)\.html/);
    61.             let filename = 'extracted_text';
    62.             if (match) {
    63.                 let threadId = match[1];
    64.                 let currentPage = match[2];
    65.                 filename = `extracted_text-${threadId}-${currentPage}`;
    66.             }

    67.             let blob = new Blob([contentArray.join('\n')], { type: 'text/plain' });
    68.             let link = document.createElement('a');
    69.             link.href = URL.createObjectURL(blob);
    70.             link.download = filename + '.txt';
    71.             link.click();

    72.             //自动跳转到下一页
    73.             if (match) {
    74.                 let threadId = match[1];
    75.                 let currentPage = parseInt(match[2]);
    76.                 let nextPage = currentPage + 1;
    77.                 let newUrl = currentUrl.replace(/thread-(\d+)-(\d+)-(\d+)\.html/, `thread-${threadId}-${nextPage}-$3.html`);
    78.                 window.location.href = newUrl;
    79.             }
    80.         }
    81.     });
    82. })();
    复制代码

    附录

    Excel 分列教程(以【疯狂之旅】疯狂山庄-报名登记 第一页为例)


    来自群组: 星象占卜

    本帖子中包含更多资源

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

    x

    评分

    参与人数 2血液 +4 追随 +2 堕落 +1 收起 理由
    肥鱼 + 4 + 1 + 1 赞一个!
    Morphyus + 1

    查看全部评分

    回复

    使用道具 举报

    近地夜航风物长宜Forever Titanic至尊法师裸体克里斯【圣诞限定】心心念念小雪人梅克军徽『逆境中的幸运女神』朴素的誓言无瑕的回忆

      回复

      举报

      茉香啤酒没有梦想的咸鱼神秘商店贵宾卡诺克提斯·路西斯·伽拉姆普隆普特·阿金塔姆传说的黑道-桐生一马亚当‧简森安杜因·乌瑞恩幻象克里斯·埃文斯

        回复

        举报

        雄躯的昇格丹雀衔五穗,人间始丰登遗留之人的城堡不洁圣子冒险专用绳索近地夜航真·天使之赐龙鳞石岛屿探险家赛博朋克2077

          回复

          举报

          阿怪GHOST裸体克里斯【圣诞限定】心心念念小雪人【夏日限定】夏日的泰凯斯史莱姆牧场虚空之海的鲸不朽之恋遗留之人的城堡

            回复

            举报

            漂洋小船冒险用指南针破损的旧书人鱼之泪雪王的心脏苏格兰圆脸胖鸡[Pro Max]丛林的鸟飞走了不曾寄出的信件幽灵竹筒『随时随地开启!』

              回复

              举报

              最终幻想XIV最终幻想XVI赛博朋克2077丹妮莉丝·坦格利安希尔瓦娜斯·风行者官复原职塞巴斯蒂安·斯坦杰森‧斯坦森荒野大镖客:救赎 II

                回复

                举报

                百相千面-晦永远的克叔業火死鬥实现梦想官复原职虚空之海的鲸都市:天际线2Zootopia『逆境中的幸运女神』羽人与蜕变

                  回复

                  举报

                  最终幻想XIV『逆境中的幸运女神』苍穹禁城琉璃玉坠黄金树的恩惠炽天使之拥森林鹿夏日柯基苏醒的格罗姆虚空之海的鲸

                    可以先疯狂点击下一页,把所有页面加载完成
                    然后再一次性提取,这样更加省事一点
                    回复

                    举报

                    史莱哲林丹雀衔五穗,人间始丰登寶可夢 Pokémon崩朽之青铜龙王蜘蛛侠金牌矿工岛田源氏杰西·麦克雷

                      回复

                      举报

                      缘起星空虚空之海的鲸

                        能忽略格式和空格还是方便多了,之前格雷用脚本之前还要一个一个去手动改格式
                        回复

                        举报

                        GM論壇進階勛章夜灯幼年独角兽枕套幽灵驯化红龙幼崽牧羊人

                          回复

                          举报

                          卡利亚权杖骑士遗盔雄躯的昇格时间尽头的虚空史莱姆牧场骑兽之子丹妮莉丝·坦格利安实现梦想官复原职泰比里厄斯

                            回复

                            举报

                            亚索月影狼晓月终焉旅行骰子!卡利亚权杖

                              回复

                              举报

                              无瑕的回忆镜中小鸟香蕉特饮40x43 隐形➀香喷喷的烤鸡月影狼

                                回复

                                举报

                                石肤术吃了一半的面包萨赫的蛋糕康纳/Connor召唤古代战士炼金之心无法消解的怨恨奥利维尼斯辉石头罩

                                  回复

                                  举报

                                  不洁圣子璀璨金币小丑与格雷与星光璀璨牌中小丑 · 呼之欲出镜中小鸟无尽的怀表幸运女神的微笑遗留之人的城堡诞星之所

                                    回复

                                    举报

                                    Chris Mazdzer蓝礼·重生鹿三杰森‧斯坦森自由丹·雷诺斯亚瑟‧摩根内森·德雷克虚空之海的鲸卡利亚权杖

                                      对我这类闲鱼没用但是对泥潭的活动员们很有用的脚本,方便活动员也能更好地搞坛内活动了
                                      回复

                                      举报

                                      20x43 隐形➀吃饱金币的Doge冒险用指南针金牌矿工小小安全帽小小舞台阿拉喵?神灯图腾饼干『梦旅存根』

                                        回复

                                        举报

                                        BIG BOSS肥皂铁牛泰比里厄斯吃饱金币的Doge亚瑟‧摩根妙手空空杰夫‧莫罗艾吉奥自由

                                          回复

                                          举报

                                          您需要登录后才可以回帖 登录 | 立即注册

                                          本版积分规则

                                          文字版|手机版|小黑屋|GameMale

                                          GMT+8, 2025-1-8 09:36 , Processed in 0.170405 second(s), 146 queries , Redis On.

                                          Copyright © 2013-2025 GameMale

                                          All Rights Reserved.

                                          快速回复 返回列表