GameMale
登陆 / 注册 搜索

USERCENTER

SEARCHSITE

搜索

查看: 1022|回复: 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

    查看全部评分

    回复

    使用道具 举报

    驱逐吉尔·沃瑞克霍格沃兹魔法学校Life of Water风物长宜Forever Titanic裸体克里斯梅克军徽被释放的灵魂小小舞台

      回复

      使用道具 举报

      白猪猪储蓄罐㊖诺克提斯·路西斯·伽拉姆普隆普特·阿金塔姆传说的黑道-桐生一马亚当‧简森幻象克里斯·埃文斯至死不渝杰森‧斯坦森.月光骑士

        回复

        使用道具 举报

        金猪猪储蓄罐㊖遗留之人的城堡不洁圣子冒险专用绳索近地夜航真·天使之赐龙鳞石岛屿探险家赛博朋克2077王者之盾

          回复

          使用道具 举报

          阿怪GHOST吃饱金币的Doge秘密空瓶裸体克里斯【圣诞限定】心心念念小雪人【夏日限定】夏日的泰凯斯史莱姆牧场虚空之海的鲸不朽之恋

            回复

            使用道具 举报

            金猪猪储蓄罐㊖小小舞台漂洋小船『随时随地开启!』冒险用指南针破损的旧书丛林的鸟飞走了雪王的心脏人鱼之泪幽灵竹筒

              回复

              使用道具 举报

              最终幻想XIV最终幻想XVI赛博朋克2077近地夜航官复原职丹妮莉丝·坦格利安重生之境皮尔斯‧尼凡斯

                回复

                使用道具 举报

                百相千面-晦永远的克叔業火死鬥实现梦想官复原职虚空之海的鲸Zootopia幸运女神的微笑『逆境中的幸运女神』御医神兔

                  回复

                  使用道具 举报

                  『逆境中的幸运女神』苍穹禁城最终幻想XIV狩猎用小刀炽天使之拥SCP-s-1889-第七页GHOST森林鹿夏日柯基

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

                    使用道具 举报

                    Drover.冒险专用绳索格拉迪欧拉斯金牌矿工索尔·奥丁森.『逆境中的幸运女神』骑兽之子岛田源氏杰西·麦克雷

                      回复

                      使用道具 举报

                      缘起星空虚空之海的鲸

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

                        使用道具 举报

                        GM論壇勛章夜灯寶可夢 Pokémon幼年独角兽枕套幽灵瑞雪兆丰年,生灵万物新

                          回复

                          使用道具 举报

                          光之战士雷文克劳裸体克里斯亚瑟‧摩根萨菲罗斯BIG BOSS亚当‧简森铁牛不灭狂雷

                            回复

                            使用道具 举报

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

                              回复

                              使用道具 举报

                              灵光补脑剂镜中小鸟香蕉特饮40x43 隐形➀香喷喷的烤鸡月影狼

                                回复

                                使用道具 举报

                                赛博朋克2077亚当‧简森克里斯·埃文斯擎天柱(Peterbilt389).超人.大黄蜂(ChevroletCamaro).嗜血斩首斧山猫图腾

                                  回复

                                  使用道具 举报

                                  金猪猪储蓄罐㊖闪耀的魔仙棒石鬼面双贤辉石头罩无尽的怀表人鱼之泪脉律辐石劫掠核芯瓮中能言蛙遗留之人的城堡

                                    回复

                                    使用道具 举报

                                    男色时代Chris Mazdzer.金刚狼杰森‧斯坦森.谜亚瑟‧摩根内森·德雷克虚空之海的鲸卡利亚权杖

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

                                      使用道具 举报

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

                                        回复

                                        使用道具 举报

                                        BIG BOSS肥皂铁牛泰比里厄斯吃饱金币的Doge亚瑟‧摩根自由克里斯·埃文斯艾吉奥杰森‧斯坦森.

                                          回复

                                          使用道具 举报

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

                                          本版积分规则

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

                                          GMT+8, 2024-11-15 12:56 , Processed in 0.151294 second(s), 143 queries , Redis On.

                                          Copyright © 2013-2024 GameMale

                                          All Rights Reserved.

                                          快速回复 返回列表