I.はじめに
本文简单介绍一下如何用puppeteer抓取页面数据。
第二に、ダウンロード
npm install puppeteer --save-dev
npm install typescrip --save-dev
第三に、例
(A)の例(コードのセクションを参照)
import { launch } from 'puppeteer';
async function maoyan_board_run() {
let browser = await launch({
ignoreHTTPSErrors: true,
headless: true,
executablePath: 'D:\\wangxiao\\chrome-win\\chrome-win\\chrome.exe',
args: ['--start-maximized']
});
const page = await browser.newPage();
await page.setViewport({width:1980,height:1080});
await page.goto('https://maoyan.com/board', { waitUntil: 'load' });
console.log(await page.title());
await browser.close();
}
maoyan_board_run();
操作の後、現在のページのタイトルに合意し、実行するコードを解析
- 打ち上げ()アナログパラメータに注意を払うブラウザ、ヘッドレス起動します、ブラウザを開くことなく、真の無限モード - 開始 - 最大化:ブラウザが最大化、executablePath:chromiun指定されたパスを
- 新しいページを開くにはbrowser.newPage()
- page.setViewport()アスペクト指定されたウィンドウ
- page.goto()Webサイト、waitUtilを開くために:ロードされた負荷
(B)分析ページセレクタ
のは、このページを分析してみましょう、我々は最初の人気リスト、映画の名前を見つけ、主演、リリースタイム1であり、それは限り、我々は他のものを得るように、すべて同じに取得しているではありません
さんが1点を分析してみましょう
const movie_bank = 'i[class*=board-index]';
ページ要素の分析によると、タグ内の値を取得する(言うべき$$ evalの使用量無用、すでに話されています)
、
const banks = await page.$$eval(movie_bank, list =>
list.map(n => n.innerHTML)
);
次のようにYihuhuhuapiao、完全なコードは、他のコンテンツ取得方法
// 热门口碑榜-名次
const movie_bank = 'i[class*=board-index]';
// 热门口碑榜-名字
const movie_name = '.movie-item-info .name a';
// 热门口碑榜-主演
const movie_star = '.movie-item-info .star';
// 热门口碑榜-上映时间
const movie_releasetime = '.movie-item-info .releasetime';
// 热门口碑榜-图片
const board_lists_images = '.board-wrapper dd .image-link .board-img';
async function maoyan_board_run() {
let browser = await launch({
ignoreHTTPSErrors: true,
headless: true,
executablePath: 'D:\\wangxiao\\chrome-win\\chrome-win\\chrome.exe',
args: ['--start-maximized']
});
const page = await browser.newPage();
await page.setViewport({width:1980,height:1080});
await page.goto('https://maoyan.com/board', { waitUntil: 'load' });
// await autoScroll(page);
const length = await page.evaluate( (movie_bank) => {
return document.querySelectorAll(movie_bank).length;
},movie_bank);
const banks = await page.$$eval(movie_bank, list =>
list.map(n => n.innerHTML)
);
const names = await page.$$eval(movie_name, list =>
list.map(n => n.getAttribute('title'))
);
const stars = await page.$$eval(movie_star, list =>
list.map(n => n.innerHTML.replace(/\n/g,"").replace(/\s/g,""))
);
const releasetimes = await page.$$eval(movie_releasetime, list =>
list.map(n => n.innerHTML)
);
let data = [];
for (let i =0;i<length;i++) {
data.push({
bank:banks[i],
name:names[i],
star:stars[i],
releasetime:releasetimes[i]
})
}
await page.waitFor(10000);
console.log(data);
await browser.close();
}
maoyan_board_run();