视频资源请求解析

一、搜索页

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;
  },

  

请求结果示例图

 

posted @ 2025-06-25 15:55  ヤBestァ玉露い  阅读(657)  评论(0)    收藏  举报