ホームページ >ウェブフロントエンド >jsチュートリアル >Node がヘッドラインビデオをバッチでクロールして保存する方法 (コード実装)
この記事の内容は、Node がヘッドラインビデオのバッチクロールと保存を実装する方法に関するものです。必要な方は参考にしていただければ幸いです。
ビデオや画像をバッチでクロールする一般的なルーチンは、クローラーを使用してファイル リンクのコレクションを取得し、writeFile などのメソッドを使用してファイルを 1 つずつ保存することです。ただし、Toutiao のビデオ リンクは、クロールする必要がある HTML ファイル (サーバー側のレンダリング出力) にキャプチャできません。ビデオ リンクは、ページがクライアント側でレンダリングされるときに、特定の js ファイルのアルゴリズムまたは復号化メソッドを通じて、ビデオの既知のキーまたはハッシュ値に基づいて動的に計算され、ビデオ タグに追加されます。これはウェブサイトのクロール対策でもあります。
これらのページを参照すると、audit 要素を通じて計算されたファイル アドレスを確認できます。ただし、バッチでダウンロードする場合、ビデオ リンクを 1 つずつ手動で取得することはお勧めできません。幸いなことに、puppeteer は Chrome へのアクセスをシミュレートする機能を提供しており、ブラウザーによってレンダリングされた最終ページをクロールすることができます。
npm i npm start
注意: puppeteer のインストールプロセスは少し時間がかかります。気長にお待ちください。
設定ファイル公式API
puppeteerは、ChromeまたはChromiumを制御するための高レベルのAPIを提供します。
puppeteer 主な機能:
Web ページを使用して PDF と画像を生成
SPA アプリケーションをクロールし、プリレンダリングを生成コンテンツ (つまり、「SSR」サーバー側レンダリング)
Web サイトからコンテンツをキャプチャできます
自動化されたフォーム送信、UI テスト、キーボード入力など
使用する API:
puppeteer.launch() ブラウザ インスタンスを起動します
ブラウザ .newPage() 新しいページを作成します
page.goto() 指定した Web ページを入力します
page.screenshot() スクリーンショット
// 配置相关 module.exports = { originPath: 'https://www.ixigua.com', // 页面请求地址 savePath: 'D:/videoZZ' // 存放路径 }ビデオ ファイルのダウンロードメソッド
const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto('https://example.com'); await page.screenshot({path: 'example.png'}); await browser.close(); })();
##ビデオデータを取得
const downloadVideo = async video => { // 判断视频文件是否已经下载 if (!fs.existsSync(`${config.savePath}/${video.title}.mp4`)) { await getVideoData(video.src, 'binary').then(fileData => { console.log('下载视频中:', video.title) savefileToPath(video.title, fileData).then(res => console.log(`${res}: ${video.title}`) ) }) } else { console.log(`视频文件已存在:${video.title}`) } }
getVideoData (url, encoding) { return new Promise((resolve, reject) => { let req = http.get(url, function (res) { let result = '' encoding && res.setEncoding(encoding) res.on('data', function (d) { result += d }) res.on('end', function () { resolve(result) }) res.on('error', function (e) { reject(e) }) }) req.end() }) }対象 Web サイト:
Github アドレス
以上がNode がヘッドラインビデオをバッチでクロールして保存する方法 (コード実装)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。