【问题标题】:How to properly Web Scrape YouTube with node.js?如何使用 node.js 正确抓取 YouTube?
【发布时间】:2021-06-09 18:34:23
【问题描述】:

我是网络抓取的新手,我正在尝试在类似 https://www.youtube.com/results?search_query=nodejs+tutorial 的搜索查询中通过网络 抓取 youtube 获取视频标题,我正在尝试使用 node.js 来实现这一点

到目前为止,我的代码如下所示:

const express= require('express');
const ejs =require('ejs');
const got = require('got');

async function scrape(url){
    try {
        const response = await got(url);
        return response.body;
    } 
    catch (error) {
        return error.response.body;
    }
}

const app=express();

app.use(express.json());
app.use(express.urlencoded({extended:true}));

app.set('view engine','ejs');

app.get('/',(req,res)=>{
     res.render('./index/index.ejs');
});

app.post('/',async(req,res)=>{
    console.log(req.body);
    var scrape_html= await scrape(`https://www.youtube.com/results?search_query=${req.body.url}`);
    res.json({'html':scrape_html});
});

app.listen(3000,()=>{
    console.log('server now listening...');
});

但是当您在浏览器中实际访问该站点时,scrape_html 看起来并不像实际的 html,为什么会这样?如何获取网页的实际 html?和cookie有关系吗?

【问题讨论】:

标签: javascript node.js web-scraping


【解决方案1】:

我会向您推荐 Puppeteer 之类的东西。这是代码(this is how it works):

const puppeteer = require("puppeteer");
const queryup = "nodejs+tutorial";
const query = encodeURI(queryup);

async function YTSearch(searchQuery) {
  const browser = await puppeteer.launch({
    headless: false,
    args: ["--no-sandbox", "--disable-setuid-sandbox"],
  });
  const page = await browser.newPage();
  await page.goto(
    `https://www.youtube.com/results?search_query=${searchQuery}`
  );
  await page.waitForSelector("div#contents");
  await page.waitForTimeout(10000);

  const titles = await page.evaluate(function () {
    return Array.from(
      document.querySelectorAll("ytd-video-renderer a#video-title")
    ).map((el) => ({
      title: el.getAttribute("title"),
      link: "https://www.youtube.com" + el.getAttribute("href"),
    }));
  });

  await browser.close();
  console.log(titles);
}

YTSearch(query);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-24
    • 2011-09-19
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    相关资源
    最近更新 更多