📖桔纸书屋

https://m.juzhishuwu.net

laizhiyu (6509)4小时前

站点:桔纸书屋(m.juzhishuwu.net;.com 会 301 到 .net)。全站 GBK,jieqiCMS 模板。
【搜索】GET /modules/article/search.php?searchkey=&searchtype=articlename。多结果为  六列表格;单结果站点 302 直跳详情页,靠 bookUrlPattern 走详情兜底。结果链接是 .com 域,用 ##替换 归一成 .net,否则每次详情多等一次 301(实测 +7 秒)。
★搜索页分页是假的:page=2/3 返回与第 1 页完全相同的内容,故 bookList 对 page>1 直接短路返回空,避免无限翻页。
★站点限频不稳定:提示「两次搜索的间隔时间不得少于 30 秒」,清 cookie / 换 UA / 伪造时间戳均无效;实测静默 30~45 秒后可恢复,但连续搜索仍会随机报错,属站点侧问题。
【目录】详情页即第 1 页(45 章/页),后续页 /xs///。分页条只显示当前页 ±10 页,故 nextTocUrl 只返回「下一页」1 个 URL(末页 return null)。
★必须只返回 1 个 URL:源码 BookChapterList 的 when(nextUrlList.size) 中,1→走串行循环(每页再求值一次),其余→走 mapAsync 并发且按「完成顺序」emit(buffer(0)+信号量),章节顺序不可控。只返回 1 个 URL 可强制串行,顺序绝对可控。
★若一次返回全部页 URL:①并发分支按完成顺序 addAll,长书目录会乱序;②2 页目录的书 page1 只返回 1 个 → 仍走串行 → page2 再求值又返回 page1 → 重复抓取,经 reverse→去重→reverse 后顺序被轮转成「第46章在前、第45章在后」(《我的师父是仙子》实测)。
【正文】#content 内以 
分行,章内分页由 a.btn-info 标记(href 形如 xxx_2.html,末页该元素消失)。两个坑:①站点按字数硬截断,跨页会切断句子甚至切断   实体(页尾留 &n、下页开头 bsp;);②部分书(如《完美世界》)站点把正文重复输出 5 份,每份前有「< "https:">提供的《书名》…(第N页)」标记。故正文用 @js 自行按页抓取:以段首   判续行并无缝粘合、遇到第二个分页标记即截断、整页与已收内容重复则跳过、修复断裂实体、剥掉广告尾巴。 【发现】7 个分类 /list/<1-7>_.html、完本 /wanben/1_、榜单 /paihangbang.html(8 榜单静态单页,用 ?page= 假参数让第 2 页起返回空以停翻页)。 ★发现页有两种列表结构:分类/完本页用 ul.txt-list-row5(li 含 s1分类/s2书名/s3最新章节/s4作者),榜单页用 ul.txt-list-row3(li 仅含 s1排名/s2书名/s5更新日期,无作者无章节)。bookList 先试 row5、回退 row3,并按 href 去重;榜单页作者与最新章节会留空,进入详情页后由 ruleBookInfo 补齐。
二维码导入
{
    "bookSourceComment": "站点:桔纸书屋(m.juzhishuwu.net;.com 会 301 到 .net)。全站 GBK,jieqiCMS 模板。\n【搜索】GET \/modules\/article\/search.php?searchkey=<GBK>&searchtype=articlename。多结果为 <tr id=\"nr\"> 六列表格;单结果站点 302 直跳详情页,靠 bookUrlPattern 走详情兜底。结果链接是 .com 域,用 ##替换 归一成 .net,否则每次详情多等一次 301(实测 +7 秒)。\n★搜索页分页是假的:page=2\/3 返回与第 1 页完全相同的内容,故 bookList 对 page>1 直接短路返回空,避免无限翻页。\n★站点限频不稳定:提示「两次搜索的间隔时间不得少于 30 秒」,清 cookie \/ 换 UA \/ 伪造时间戳均无效;实测静默 30~45 秒后可恢复,但连续搜索仍会随机报错,属站点侧问题。\n【目录】详情页即第 1 页(45 章\/页),后续页 \/xs\/<id>\/<page>\/。分页条只显示当前页 ±10 页,故 nextTocUrl 只返回「下一页」1 个 URL(末页 return null)。\n★必须只返回 1 个 URL:源码 BookChapterList 的 when(nextUrlList.size) 中,1→走串行循环(每页再求值一次),其余→走 mapAsync 并发且按「完成顺序」emit(buffer(0)+信号量),章节顺序不可控。只返回 1 个 URL 可强制串行,顺序绝对可控。\n★若一次返回全部页 URL:①并发分支按完成顺序 addAll,长书目录会乱序;②2 页目录的书 page1 只返回 1 个 → 仍走串行 → page2 再求值又返回 page1 → 重复抓取,经 reverse→去重→reverse 后顺序被轮转成「第46章在前、第45章在后」(《我的师父是仙子》实测)。\n【正文】#content 内以 <br> 分行,章内分页由 a.btn-info 标记(href 形如 xxx_2.html,末页该元素消失)。两个坑:①站点按字数硬截断,跨页会切断句子甚至切断 &nbsp; 实体(页尾留 &n、下页开头 bsp;);②部分书(如《完美世界》)站点把正文重复输出 5 份,每份前有「< \"https:\">提供的《书名》…(第N页)」标记。故正文用 @js 自行按页抓取:以段首 &nbsp; 判续行并无缝粘合、遇到第二个分页标记即截断、整页与已收内容重复则跳过、修复断裂实体、剥掉广告尾巴。\n【发现】7 个分类 \/list\/<1-7>_<page>.html、完本 \/wanben\/1_<page>、榜单 \/paihangbang.html(8 榜单静态单页,用 ?page= 假参数让第 2 页起返回空以停翻页)。\n★发现页有两种列表结构:分类\/完本页用 ul.txt-list-row5(li 含 s1分类\/s2书名\/s3最新章节\/s4作者),榜单页用 ul.txt-list-row3(li 仅含 s1排名\/s2书名\/s5更新日期,无作者无章节)。bookList 先试 row5、回退 row3,并按 href 去重;榜单页作者与最新章节会留空,进入详情页后由 ruleBookInfo 补齐。",
    "bookSourceGroup": "AI",
    "bookSourceName": "📖桔纸书屋",
    "bookSourceType": 0,
    "bookSourceUrl": "https:\/\/m.juzhishuwu.net",
    "bookUrlPattern": "https?:\/\/m\\.juzhishuwu\\.(?:com|net)\/xs\/\\d+\\.html",
    "customButton": false,
    "customOrder": 2,
    "enabled": true,
    "enabledCookieJar": false,
    "enabledExplore": true,
    "eventListener": false,
    "exploreUrl": "[{\"title\":\"玄幻\",\"url\":\"https:\/\/m.juzhishuwu.net\/list\/1_{{page}}.html\"},{\"title\":\"修真\",\"url\":\"https:\/\/m.juzhishuwu.net\/list\/2_{{page}}.html\"},{\"title\":\"都市\",\"url\":\"https:\/\/m.juzhishuwu.net\/list\/3_{{page}}.html\"},{\"title\":\"穿越\",\"url\":\"https:\/\/m.juzhishuwu.net\/list\/4_{{page}}.html\"},{\"title\":\"网游\",\"url\":\"https:\/\/m.juzhishuwu.net\/list\/5_{{page}}.html\"},{\"title\":\"科幻\",\"url\":\"https:\/\/m.juzhishuwu.net\/list\/6_{{page}}.html\"},{\"title\":\"其他\",\"url\":\"https:\/\/m.juzhishuwu.net\/list\/7_{{page}}.html\"},{\"title\":\"完本\",\"url\":\"https:\/\/m.juzhishuwu.net\/wanben\/1_{{page}}\"},{\"title\":\"榜单\",\"url\":\"https:\/\/m.juzhishuwu.net\/paihangbang.html?page={{page}}\"}]",
    "lastUpdateTime": "1792748877528",
    "respondTime": 2219,
    "ruleBookInfo": {
        "author": "div.info div.fix > p:nth-of-type(1)@text##作\\s*者[::]\\s*",
        "coverUrl": "div.imgbox img@src",
        "intro": "div.desc@text||div.m-desc@text##简\\s*介[::]\\s*",
        "kind": "div.info div.fix > p:nth-of-type(2)@text##类\\s*别[::]\\s*",
        "lastChapter": "div.info div.fix > p:nth-of-type(5) a@text",
        "name": "div.info h1@text"
    },
    "ruleContent": {
        "content": "@js:(function(){var J=Packages.org.jsoup.Jsoup;var MARK=\/提供的《|\\(第\\d+\\\/\\d+页\\)|^<\\\/div>|^&lt;\\s*\"https:\/;function segs(h){var d=J.parse(h);var box=d.select('#content').first();if(box==null)return null;var c=box.clone();c.select('a,script,style').remove();var parts=String(c.html()).split(\/<br\\s*\\\/?>\/i),arr=[];for(var i=0;i<parts.length;i++){var t=parts[i].replace(\/<[^>]+>\/g,'').replace(\/^[ \\t\\r\\n]+\/,'').replace(\/[ \\t\\r\\n]+$\/,'');if(t.replace(\/&nbsp;|&amp;|\\s\/g,'')==='')continue;if(MARK.test(t)&&arr.length>0)break;arr.push(t);}return {arr:arr,next:(box.select('a.btn-info').size()>0?box.select('a.btn-info').attr('href'):null)};}function isRepeat(page,out){if(out.length<3||page.length<2)return false;var p0=page[0];var lo=Math.max(0,out.length-60);for(var i=lo;i<out.length;i++){if(out[i]!==p0)continue;var ok=0;for(var j=0;j<page.length&&i+j<out.length;j++){if(out[i+j]!==page[j])break;ok++;}if(ok>=Math.min(3,page.length))return true;}return false;}var cur=segs(result),out=[],guard=0;while(cur!=null&&guard<40){guard++;var a=cur.arr;if(a.length>0&&!isRepeat(a,out)){if(out.length>0&&!\/^&nbsp;\/.test(a[0])){out[out.length-1]=out[out.length-1]+a[0];a=a.slice(1);}for(var i=0;i<a.length;i++)out.push(a[i]);}if(!cur.next)break;cur=segs(java.ajax(cur.next));}var txt=out.join('\\n').replace(\/&(?:amp;)?n\\s*bsp;\/g,'&nbsp;');txt=txt.replace(\/&nbsp;\/g,' ').replace(\/&lt;\/g,'<').replace(\/&gt;\/g,'>').replace(\/&quot;\/g,'\"').replace(\/&#39;\/g,\"'\").replace(\/&amp;\/g,'&');var NOISE=\/请牢记|免费最快|无防盗|恋上你看书|bookla|收藏本站|请收藏|请大家收藏|全网最快|更新速度|首发起点|支持正版|看清爽的小说就到|您现在阅读的是|天才一秒|记住本站|无弹窗|笔趣阁|最快更新|本章未完|点击下一页\/;var DOM=\/https?:\\\/\\\/|https?:\\s*\"|www\\.|\\.com|\\.net|\\.org|bookla|提供的《\/;var ls=txt.split('\\n'),res=[];for(var k=0;k<ls.length;k++){var t=ls[k].replace(\/^\\s+|\\s+$\/g,'');if(!t)continue;t=t.replace(\/[,,]\\s*请牢记[::]?.*$\/,'').replace(\/^\\s+|\\s+$\/g,'');if(!t)continue;if(DOM.test(t)&&t.length<90)continue;if(t.length<=60&&NOISE.test(t))continue;res.push(t);}return res.join('\\n');})()"
    },
    "ruleExplore": {
        "author": "span.s4@text",
        "bookList": "@js:(function(){var J=Packages.org.jsoup.Jsoup;var m=String(baseUrl).match(\/[?&]page=(\\d+)\/);if(m&&parseInt(m[1])>1)return[];var doc=J.parse(result);var lis=doc.select('ul.txt-list-row5 li');if(lis.size()===0){lis=doc.select('div.row-rank div.tab-bd ul.txt-list-row3:not([style*=none]) li');}var seen={},out=[];for(var i=0;i<lis.size();i++){var li=lis.get(i);var a=li.select('span.s2 a').first();if(a==null)continue;var h=a.attr('href');if(!h||seen[h])continue;seen[h]=1;out.push(li);}return out;})()",
        "bookUrl": "span.s2 a@href",
        "kind": "@js:(function(){var a=result.select('span.s1');if(a.size()===0)return '';var t=String(a.first().text()).replace(\/[\\[\\]]\/g,'').replace(\/^\\s+|\\s+$\/g,'');return \/^\\d+$\/.test(t)?'':t;})()",
        "lastChapter": "span.s3@text",
        "name": "span.s2 a@text"
    },
    "ruleSearch": {
        "author": "td:nth-of-type(3)@text",
        "bookList": "@js:(function(){var m=String(baseUrl).match(\/[?&]page=(\\d+)\/);if(m&&parseInt(m[1])>1)return[];var J=Packages.org.jsoup.Jsoup;var doc=(typeof result==='string')?J.parse(result):result;return doc.select('tr#nr');})()",
        "bookUrl": "td:nth-of-type(1) a@href##^https?:\/\/m\\.juzhishuwu\\.com##https:\/\/m.juzhishuwu.net",
        "lastChapter": "td:nth-of-type(2) a@text",
        "name": "td:nth-of-type(1) a@text",
        "wordCount": "td:nth-of-type(4)@text"
    },
    "ruleToc": {
        "chapterList": "#first + div.section-box ul.section-list li",
        "chapterName": "a@text",
        "chapterUrl": "a@href",
        "nextTocUrl": "@js:(function(){var m=String(result).match(\/当前第\\s*(\\d+)\\s*页[,,]\\s*共\\s*(\\d+)\\s*页\/);if(!m)return null;var cur=parseInt(m[1]),total=parseInt(m[2]);if(cur>=total)return null;var bm=String(baseUrl).match(\/^(https?:\\\/\\\/[^\\\/]+)\\\/xs\\\/(\\d+)\/);if(!bm)return null;return [bm[1]+'\/xs\/'+bm[2]+'\/'+(cur+1)+'\/'];})()"
    },
    "searchUrl": "https:\/\/m.juzhishuwu.net\/modules\/article\/search.php?searchkey={{key}}&searchtype=articlename&page={{page}},{\"charset\":\"gbk\"}",
    "weight": 0
}
广告