视频资源请求解析
一、搜索页
get:url: 'https://dbzy1.com/vodsearch/-------------.html', data: { wd: "%E7%8B%90%E5%A6%96%E5%B0%8F%E7%BA%A2%E5%A8%98", //名称 // submit: "search" },
解析js
parseHtmlToJson(htmlString) {
// 存储所有匹配的 div 内容
const xingVbDivs = [];
// 正则表达式匹配所有 class="xing_vb" 的 div
const divPattern = /<div\s+class\s*=\s*"xing_vb"\s*[^>]*>([\s\S]*?)<\/div>/gi;
let divMatch;
while ((divMatch = divPattern.exec(htmlString)) !== null) {
// 提取 div 内容
const divContent = divMatch[1];
// 添加到结果数组
xingVbDivs.push(divContent);
}
var xingVbDiv = xingVbDivs[0];
// 存储结果的数组
const result = [];
let listHtml = xingVbDiv;
// 提取所有可能的项
const itemPattern = /<li[^>]*>([\s\S]*?)<\/li>|<div[^>]*class="[^"]*item[^"]*"[^>]*>([\s\S]*?)<\/div>/g;
let itemMatch;
while ((itemMatch = itemPattern.exec(listHtml)) !== null) {
const itemHtml = itemMatch[1] || itemMatch[2];
if (!itemHtml) continue;
try {
// 提取标题和状态
let title = '';
let status = '';
let url = '';
// 查找标题链接
const titleLinkMatch = itemHtml.match(/<a[^>]*?href="([^"]+)"[^>]*?>([\s\S]*?)<\/a>/);
if (titleLinkMatch) {
url = titleLinkMatch[1];
const titleHtml = titleLinkMatch[2];
// 分离标题和状态
const titleMatch = titleHtml.match(/^(.*?)(?:<em[^>]*>(.*?)<\/em>)?$/);
if (titleMatch) {
title = titleMatch[1].replace(/<[^>]+>/g, '').trim();
status = titleMatch[2] ? titleMatch[2].trim() : '';
}
}
// 提取类别
let category = '';
const categoryMatch = itemHtml.match(/<span[^>]*class="[^"]*category[^"]*"[^>]*>([\s\S]*?)<\/span>/);
if (!categoryMatch) {
// 尝试其他可能的class
const altCategoryMatch = itemHtml.match(/<span[^>]*class="[^"]*xing_vb5[^"]*"[^>]*>([\s\S]*?)<\/span>/);
if (altCategoryMatch) {
category = altCategoryMatch[1].replace(/<[^>]+>/g, '').trim();
}
} else {
category = categoryMatch[1].replace(/<[^>]+>/g, '').trim();
}
// 提取更新时间
let updateTime = '';
const timeMatch = itemHtml.match(/<span[^>]*class="[^"]*time[^"]*"[^>]*>([\s\S]*?)<\/span>/);
if (!timeMatch) {
// 尝试其他可能的class
const altTimeMatch = itemHtml.match(/<span[^>]*class="[^"]*xing_vb7[^"]*"[^>]*>([\s\S]*?)<\/span>/);
if (altTimeMatch) {
updateTime = altTimeMatch[1].replace(/<[^>]+>/g, '').trim();
}
} else {
updateTime = timeMatch[1].replace(/<[^>]+>/g, '').trim();
}
// 只添加有标题的项
if (title) {
result.push({
title,
status: status || '',
category: category || '',
updateTime: updateTime || '',
url: url || '#'
});
}
} catch (e) {
console.error('解析影视项时出错:', e);
continue;
}
}
return result;
},
请求结果示例图

二、详情页
url: 'https://dbzy1.com/voddetail/8912.html', //来源于请求一 data: { ac: "detail" },
解析js
parseHtmlToJson2(htmlString) {
// 存储所有匹配的 div 内容
const xingVbDivs = [];
// 正则表达式匹配所有 class="xing_vb" 的 div
const divPattern = /<div\s+id\s*=\s*"play_2"\s*[^>]*>([\s\S]*?)<\/div>/gi;
let divMatch;
while ((divMatch = divPattern.exec(htmlString)) !== null) {
// 提取 div 内容
const divContent = divMatch[1];
// 添加到结果数组
xingVbDivs.push(divContent);
}
var xingVbDiv = xingVbDivs[0];
// console.log(xingVbDiv)
// 定义正则表达式模式
const itemPattern = /<li><input[^>]*><a[^>]*title='([^']+)' href='([^']+)'[^>]*>([^<]+)<\/a><\/li>/g;
const typePattern = /<h3>播放类型:<span class="suf">([^<]+)<\/span><\/h3>/;
// 存储结果
const result = {
playType: '',
episodes: []
};
// 提取播放类型
const typeMatch = xingVbDiv.match(typePattern);
if (typeMatch && typeMatch[1]) {
result.playType = typeMatch[1].trim();
}
// 提取每集数据
let itemMatch;
while ((itemMatch = itemPattern.exec(xingVbDiv)) !== null) {
const episodeTitle = itemMatch[1].trim();
const episodeUrl = itemMatch[2].trim();
// 解析集数(从标题中提取数字)
const episodeNumMatch = episodeTitle.match(/第(\d+)集/);
const episodeNum = episodeNumMatch ? parseInt(episodeNumMatch[1], 10) : null;
result.episodes.push({
episodeNum,
title: episodeTitle,
url: episodeUrl
});
}
// 按集数排序(如果有集数信息)
if (result.episodes.length > 0 && result.episodes[0].episodeNum !== null) {
result.episodes.sort((a, b) => a.episodeNum - b.episodeNum);
}
return result;
},
请求结果示例图


浙公网安备 33010602011771号