plugin/xinjuc/html结构分析.md
https://www.xinjuc.com/?s={关键词}
凡人修仙传 → %E5%87%A1%E4%BA%BA%E4%BF%AE%E4%BB%99%E4%BC%A0搜索结果显示在以下结构中:
<div class="list-post">
<div class="card">
<div class="card-body">
<div class="section-header">
<h5>搜索"凡人修仙传"的结果...</h5>
</div>
<div class="row-xs post-list">
<!-- 搜索结果项 -->
</div>
</div>
</div>
</div>
每个搜索结果是一个 <article class="post-item"> 元素:
<div class="col-4 col-md-3 col-lg-2">
<article class="post-item">
<!-- 封面图 -->
<div class="post-image">
<a href="/30839.html" rel="bookmark" title="凡人修仙传 (2020)更至163集-百度网盘1080P高清免费动漫资源">
<div class="mark"><span>更至163</span></div>
</a>
</div>
<!-- 标题和更新时间 -->
<div class="post-body">
<h5 class="post-title line-hide-1">
<a href="/30839.html" rel="bookmark">凡人修仙传 (2020)更至163集-百度网盘1080P高清免费动漫资源</a>
</h5>
<div class="post-footer">
<span class="time">2025-04-21 更新</span>
</div>
</div>
</article>
</div>
| 字段 | CSS选择器 | 说明 |
|---|---|---|
| 详情链接 | div.post-image > a[href] | 相对路径,如 /30839.html |
| 标题 | h5.post-title a | 资源完整标题 |
| 封面图 | img.post-thumb[src] | 封面图片URL |
| 标记 | div.mark span | 状态标记,如"更至163"、"1080P" |
| 更新时间 | div.post-footer span.time | 更新日期 |
https://www.xinjuc.com/{ID}.html
<div class="article-main">
<h1 class="article-title">凡人修仙传 (2020)更至163集-百度网盘1080P高清免费动漫资源</h1>
<div class="article-meta">
<span class="item"><i class="icon icon-time"></i> 04-21</span>
<span class="item"><i class="icon icon-fenlei"></i> <a href="/dongman">动漫</a></span>
</div>
<div class="article-content">
<p><strong>凡人修仙传 (2020)百度云网盘资源下载地址:</strong></p>
<p><strong>链接: <a href="https://pan.baidu.com/s/1b5TLAN2s-ss8lDKcswlD2g?pwd=1234" rel="nofollow">
https://pan.baidu.com/s/1b5TLAN2s-ss8lDKcswlD2g?pwd=1234
</a></strong></p>
<p><strong>提取码:1234</strong></p>
<!-- 影视信息 -->
<p>导演: 伍镇焯 / 王裕仁
编剧: 金增辉 / 李欣雨
主演: 钱文青 / 杨天翔 / 杨默 / 歪歪 / 谷江山
类型: 动画 / 奇幻 / 武侠
制片国家/地区: 中国大陆
语言: 汉语普通话
首播: 2020-07-25(中国大陆)</p>
</div>
</div>
完整链接(带pwd参数):
https://pan.baidu.com/s/1b5TLAN2s-ss8lDKcswlD2g?pwd=1234
短链接(不带pwd参数):
https://pan.baidu.com/s/1b5TLAN2s-ss8lDKcswlD2g
提取码通常出现在以下位置:
<p><strong>提取码:1234</strong></p>?pwd=1234提取码[::]\s*([a-zA-Z0-9]{4})// 1. 严格的百度盘链接正则(要求s/后至少10个字符)
baiduRegex := regexp.MustCompile(`https?://pan\.baidu\.com/s/[0-9a-zA-Z_\-]{10,}(?:\?pwd=[0-9a-zA-Z]+)?`)
// 2. 提取码正则
pwdRegex := regexp.MustCompile(`提取码[::]\s*([a-zA-Z0-9]{4})`)
// 3. 从URL参数提取提取码
pwdURLRegex := regexp.MustCompile(`\?pwd=([0-9a-zA-Z]+)`)
// 4. 链接验证(避免误匹配)
func isValidBaiduLink(link string) bool {
// 必须是百度盘域名开头
if !strings.HasPrefix(link, "https://pan.baidu.com") {
return false
}
// 必须包含 /s/ 路径
if !strings.Contains(link, "/s/") {
return false
}
// 使用正则验证格式
return baiduRegex.MatchString(link)
}
// 5. 链接清理和去重
baiduURL = strings.TrimSpace(baiduURL) // 去除首尾空格
linkMap[baiduURL] = true // 使用map去重
问题1:匹配到不完整的链接
https://pan.baidu.com/s/1问题2:匹配到分享链接中的百度盘URL
https://sns.qzone.qq.com/...&summary=...pan.baidu.com/...pan.baidu.com 开头问题3:重复链接(带空格和不带空格)
https://pan.baidu.com/s/xxx 和 https://pan.baidu.com/s/xxx strings.TrimSpace() 清理| 源字段 | SearchResult字段 | 说明 |
|---|---|---|
| 标题 | Title | 完整资源标题 |
| 影视信息 | Content | 导演、主演、类型等信息 |
| 百度盘链接 | Links[0].URL | 完整的百度网盘链接 |
| 提取码 | Links[0].Password | 4位提取码 |
| 更新时间 | Datetime | 解析时间字符串 |
| 分类 | Tags[0] | 如"动漫"、"电影" |
| ID | UniqueID | xinjuc-{ID} |
| 频道 | Channel | 空字符串(插件搜索) |
req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...")
req.Header.Set("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
req.Header.Set("Accept-Language", "zh-CN,zh;q=0.9,en;q=0.8")
req.Header.Set("Referer", "https://www.xinjuc.com/")
req.Header.Set("Connection", "keep-alive")
MaxIdleConns: 50
MaxIdleConnsPerHost: 20
MaxConnsPerHost: 30
IdleConnTimeout: 90 * time.Second
sync.Map 实现线程安全缓存1. 构建搜索URL(URL编码关键词)
↓
2. 发送HTTP请求(带重试)
↓
3. 解析搜索结果页面(goquery)
↓
4. 提取基本信息(标题、链接、时间)
↓
5. 并发获取详情页(最多15个并发)
↓
6. 从详情页提取百度盘链接和提取码
↓
7. 构建SearchResult对象
↓
8. 关键词过滤
↓
9. 返回结果
// 百度盘链接正则(支持带pwd参数)
baiduRegex := regexp.MustCompile(`https?://pan\.baidu\.com/s/[0-9a-zA-Z_\-]+(?:\?pwd=[0-9a-zA-Z]+)?`)
// 提取所有百度盘链接
baiduLinks := baiduRegex.FindAllString(htmlContent, -1)
// 方式1: 从URL参数提取
if strings.Contains(baiduURL, "?pwd=") {
password = extractPwdFromURL(baiduURL)
}
// 方式2: 从文本中提取
pwdRegex := regexp.MustCompile(`提取码[::]\s*([a-zA-Z0-9]{4})`)
if match := pwdRegex.FindStringSubmatch(htmlContent); len(match) > 1 {
password = match[1]
}
result.Channel = "" // 插件搜索结果必须为空字符串
curl "http://localhost:8888/api/search?kw=凡人修仙传&plugins=xinjuc"
{
"code": 0,
"message": "success",
"data": {
"results": [
{
"unique_id": "xinjuc-30839",
"title": "凡人修仙传 (2020)更至163集-百度网盘1080P高清免费动漫资源",
"content": "导演: 伍镇焯 / 王裕仁 | 类型: 动画 / 奇幻 / 武侠",
"datetime": "2025-04-21T00:00:00Z",
"links": [
{
"type": "baidu",
"url": "https://pan.baidu.com/s/1b5TLAN2s-ss8lDKcswlD2g?pwd=1234",
"password": "1234"
}
],
"tags": ["动漫", "更至163"],
"channel": ""
}
]
}
}