我用deepseek预测了《哪吒2》最终票房

4,097 阅读5分钟

oUy1urAGIEm2X4AAXenAKD7CpQGTDQAfgAPFF9~tplv-dy-aweme-images-v2_3000_3000_q75.webp

你有没有想过,如何用AI来预测一部电影的票房?比如最近火爆的《哪吒2》,大家都在猜它会赚多少钱,但我决定不靠猜测,直接让 deepseek 来帮我做预测!

没错,这次我准备把大数据和AI相结合,用 Playwright 抓取豆瓣、淘票票、猫眼等多个平台的数据,再通过 deepseek 进行智能分析,来预测出《哪吒2》最终票房的预测。

等等,这是什么操作?!

先别急,听我慢慢给你讲。首先,我用 Playwright(对,就是那个能让你自动化浏览器操作的神器)从豆瓣、淘票票、猫眼、微博、抖音等平台上抓取实时数据,这些平台的数据对票房有着超强的预测能力。比如豆瓣的评分和评价人数,能看出观众的口碑;淘票票的想看人数,可以透露出多少人已经按捺不住想要去电影院;抖音、微博这些社交平台的热度,直接能反映出电影的火爆程度。

怎么抓取数据?

不废话了,直接上代码,告诉大家怎么抓取数据:

我们先来看下怎么在豆瓣上抓取数据:

抓取豆瓣数据

async function scrapeDouban() {
  const browser = await chromium.launch({ headless: true });
  const page = await browser.newPage();
  try {
    await page.goto('https://movie.douban.com/subject/34780991/');
    
    // 豆瓣评分
    const ratingLocator = page.locator('.rating_num');
    // 评价人数
    const votesLocator = page.locator('span[property="v:votes"]');
    
    const rating = await ratingLocator.innerText();
    const votes = await votesLocator.innerText();
    
    console.log(`豆瓣数据 - 评分: ${rating}, 投票人数: ${votes}`);
    return { rating, votes };
  } catch (error) {
    console.error('抓取豆瓣数据时出错:', error);
    return null;
  } finally {
    await browser.close();
  }
}

在这段代码中,我们使用Playwright模拟打开了一个Chrome浏览器,然后导航到了豆瓣中《哪吒2》的页面,接下来,我们抓取了该页面上的两个数据:豆瓣评分和评价人数

同样的道理,我们可以继续抓取其他几个平台的数据:

抓取淘票票数据

async function scrapeTaopiaopiao() {
  const browser = await chromium.launch({ headless: true });
  const page = await browser.newPage();
  try {
    await page.goto('https://m.taopiaopiao.com/movies/detail.html?__webview_options__=transparentTitle%3Dauto%26showProgress%3DNO%26titlePenetrate%3DNO%26so%3DNO&from=def&showid=1429839&sqm=dianying.h5.unknown.value&spm=a1z2r.7661912.nowshowing.dbuybtn_0');

    // 评分
    const scoreNumLocator = page.locator('.has-score-num');
    // 参与评分人数
    const scoreTextLocator = page.locator('.has-score-text');
    // 想看人数
    const wantSeeNumberLocator = page.locator('.reputation-bottom-box>span:first-child');
    // 看过人数
    const viewsLocator = page.locator('.reputation-bottom-box-span');

    const scoreNum = await scoreNumLocator.innerText();
    const scoreText = await scoreTextLocator.innerText();
    const wantSeeNumber = await wantSeeNumberLocator.innerText();
    const views = await viewsLocator.innerText();

    console.log(`淘票票数据 - 评分: ${scoreNum}, 参与评分人数: ${scoreText}, 想看人数: ${wantSeeNumber}, 看过人数: ${views}`);
    
    return { 
      scoreNum,
      scoreText,
      wantSeeNumber,
      views
     };
  } catch (error) {
    console.error('抓取淘票票数据时出错:', error);
    return null;
  } finally {
    await browser.close();
  }
}

抓取猫眼数据

async function scrapeMaoyan() {
  const browser = await chromium.launch({ headless: true });
  const context = await browser.newContext({
    ...devices['iPhone 13'], // 使用 iPhone 13 的配置
    locale: 'zh-CN',
    userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1'
  });
  const page = await context.newPage();
  try {
    await page.goto('https://i.maoyan.com/asgard/movie/1294273?channelId=4&cityId=1');
    await page.waitForTimeout(3000)

    // 评分
    const scoreNumLocator = page.locator('.left-section .score');
    // 参与评分人数
    const scoreTextLocator = page.locator('.people-grade>span:first-child');
    // 想看人数
    const wantSeeNumberLocator = page.locator('.real-time-word-of-mouth .top .right .num').first().locator('span:first-child');
    // 看过人数
    const viewsLocator = page.locator('.real-time-word-of-mouth .top .right .watched>span').first();

    const scoreNum = await scoreNumLocator.innerText();
    const scoreText = await scoreTextLocator.innerText();
    const wantSeeNumber = await wantSeeNumberLocator.innerText();
    const views = await viewsLocator.innerText();

    console.log(`猫眼数据 - 评分: ${scoreNum}, 参与评分人数: ${scoreText}, 想看人数: ${wantSeeNumber}, 看过人数: ${views}`);
    
    return { 
      scoreNum,
      scoreText,
      wantSeeNumber,
      views
     };
  } catch (error) {
    console.error('抓取猫眼数据时出错:', error);
    return null;
  } finally {
    await browser.close();
  }
}

抓取微博数据

async function scrapeWeibo() {
  const browser = await chromium.launch({ headless: true });
  const page = await browser.newPage();
  try {
    // 此处使用微博搜索结果页作为数据来源,请替换为合适的 URL 和选择器
    await page.goto('https://s.weibo.com/topic?q=%E5%93%AA%E5%90%92&pagetype=topic&topic=1&Refer=user_topic');
    await page.waitForTimeout(3000)

    // 热度指数
    const scoreNumLocator = page.locator('.card-wrap .card').first().locator('.info p').last();
    const scoreNum = await scoreNumLocator.innerText();

    console.log(`微博数据 - 热度指数: ${scoreNum}`);
    return { scoreNum };
  } catch (error) {
    console.error('抓取微博数据时出错:', error);
    return null;
  } finally {
    await browser.close();
  }
}

抓取抖音数据

async function scrapeDouyin() {
  const browser = await chromium.launch({ headless: false });
  const page = await browser.newPage();
  try {
    await page.goto('https://www.douyin.com/discover/search/%E5%93%AA%E5%90%922%E9%AD%94%E7%AB%A5%E9%97%B9%E6%B5%B7?aid=036a7592-d05a-4995-a86f-655dd7f45a05&type=general');
    await page.waitForTimeout(3000)

    // 热度指数
    const scoreNumLocator = page.locator('.IcWw97gF>span:first-child');
    const scoreNum = await scoreNumLocator.innerText();
    
    console.log(`抖音数据 - 热度指数: ${scoreNum}`);
    return { scoreNum };
  } catch (error) {
    console.error('抓取抖音数据时出错:', error);
    return null;
  } finally {
    await browser.close();
  }
}

数据抓取不难,难的是分析!

数据抓完了,我们怎么分析呢?这时候,deepseek 就派上用场了!我把所有平台的数据输入给它,让 deepseek 按照电影票房的预测模型进行分析。它不仅仅考虑了电影本身的热度,还会综合考虑节假日效应、市场竞争、社交媒体的传播效应等多方面的因素。

我们继续写代码来实现,接下来我们使用Promise.all来获取所有数据,然后传递给predictBoxOffice函数:

async function main() {
  const [doubanData, taopiaopiaoData, maoyanData, weiboData, douyinData] = await Promise.all([
    scrapeDouban(),
    scrapeTaopiaopiao(),
    scrapeMaoyan(),
    scrapeWeibo(),
    scrapeDouyin()
  ]);

  // 检查是否有数据抓取失败
  if (!doubanData || !taopiaopiaoData || !maoyanData || !weiboData || !douyinData) {
    console.error('错误:部分数据抓取失败,无法进行预测。');
    return;
  }

  const combinedData = {
    douban: doubanData,
    taopiaopiao: taopiaopiaoData,
    maoyan: maoyanData,
    weibo: weiboData,
    douyin: douyinData,
  };

  const predictedBoxOffice = await predictBoxOffice(combinedData);
  console.log(`预测的《哪吒2》最终票房金额为:\n${predictedBoxOffice}`);
}

// 执行主函数
main();

predictBoxOffice 函数就是重中之重了,用来最终预测哪吒2的票房,废话不多说,我们继续上代码

import OpenAI from "openai";  
  
const openai = new OpenAI({  
    baseURL: 'https://api.deepseek.com',  
    apiKey: '<DeepSeek API Key>'  
});

async function predictBoxOffice(data) {
  // 整合各平台数据
  const { douban, taopiaopiao, maoyan, weibo, douyin } = data;

  const prompt = `你是一位资深的电影票房预测专家,同时精通数据分析和市场趋势研究。请基于最新实时票房数据(包括每日票房、观影人次、排片率等),结合以下多平台数据,对电影《哪吒2》的最终票房(单位:亿元)做出精准预测。
【数据指标说明】:

1. 豆瓣数据:
   - 评分:${douban.rating}
   - 评价人数:${douban.votes}
   (高评分和大量投票通常预示着良好的口碑,但也需要关注口碑的分布情况)
2. 淘票票数据:
   - 评分:${taopiaopiao.scoreNum}
   - 参与评分人数:${taopiaopiao.scoreText}
   - 想看人数:${taopiaopiao.wantSeeNumber}
   - 看过人数:${taopiaopiao.views}
   (预售票数反映了观众的购买意愿与市场信心)
3. 猫眼数据:
   - 评分:${maoyan.scoreNum}
   - 参与评分人数:${maoyan.scoreText}
   - 想看人数:${maoyan.wantSeeNumber}
   - 看过人数:${maoyan.views}
   (“想看人数”可以衡量观众的期待值和区域市场热度)
4. 微博数据:
   - 热度指数:${weibo.scoreNum}
   (社交平台讨论热度能够反映影片在年轻群体中的影响力)
5. 抖音数据:
   - 热度指数:${douyin.scoreNum}
   (短视频平台的热度往往预示着影片的口碑传播和流行趋势)

【请重点分析以下因素】:
1. 影片定档于春节档,请评估节假日效应对票房的推动作用;
2. 请评估影片是否具备成为社会文化现象的潜力,并分析其对票房的额外拉动作用;
3. 请详细分析社交媒体(微博、抖音、B站)的热度变化趋势,尤其是上映后的爆发式传播效应;
4. 请参考中国电影市场的票房天花板(如《长津湖》57.75亿、《战狼2》56.94亿),评估《哪吒2》的票房潜力;
5. 请分析同期上映的其他影片表现,评估市场竞争格局对《哪吒2》票房的潜在影响;
6. 请基于多维度分析,给出票房预测区间(100亿元以上),并详细说明预测的不确定性因素。”

【请参考以下平台给出的最终票房预测】:
1. 猫眼专业版:超160亿元
  `;

  try {
    const completion = await openai.chat.completions.create({
      model: "deepseek-chat",
      messages: [
        {
          role: 'system',
          content: prompt,
        },
        {
          role: 'user',
          content: `请结合所有以上信息,给出电影《哪吒2魔童闹海》的最终票房预测,格式:最终预测票房:XX亿元`,
        },
      ],
      temperature: 0.3,
    });

    // 获取票房结果
    const movieBoxOfficeData = completion.choices[0].message.content;
    return movieBoxOfficeData;
  } catch (error) {
    console.error('调用模型进行预测时出错:', error);
    return null;
  }
}

然后呢?

然后就是最有趣的部分啦——根据这些数据,deepseek 给出了《哪吒2》的票房预测结果: 165亿元。

通过这种方式,我们就能比纯粹凭直觉猜测更加科学、合理地做出预测。而且,这个过程全程都是用代码自动化的,效率高到飞起!

不说了,我自己都觉得这个过程酷爆了,大家可以把代码复制到本地,运行起来试试看,看看你的预测结果把。