以下の条件でpuppeteerでヤフーニュースのリンク一覧を取得し、
連想配列に格納したいです。
・3ページ目まで
・外部サイトにはいかない
・既出のリンクは無視する
以下のコードを書いてみましたが、基準ページ以外も取得してしまいます。
大変恐縮ですが、改善方法をご教示願います。
const puppeteer = require("puppeteer"); var TARGET_URL = "ヤフーニュース" var datas = []; var items = {}; var r = 0; puppeteer.launch({ args:['--no-sandbox','--disable-gpu','--ignore-certificate-errors'], ignoreDefaultArgs: ['--disable-extentions'], ignoreHTTPSErrors: false, headless:false, slowMo :300 }).then(async browser => { try{ async function downloadRec(url,level,i){ const page = await browser.newPage(); await page.goto(url,{waitUntil:"domcontentloaded"}); console.log(url); //-----------------------リンク一覧を配列に入れる---------------------- let lists2 = await page.$$("a[href]"); for (let i = 0; i < lists2.length; i++) { //既出のサイトであれば無視 var removeDuplicates = function(object) { var result = [], comparisons = [], key, comparison; for (key in object) { comparison = JSON.stringify(object[key]); if (comparisons.indexOf(comparison) === -1) { result.push(object[key]); } comparisons.push(comparison); } return result; }; datas.push(await (await lists2[i].getProperty('href')).jsonValue()); result2 = await result[i].indexOf(TARGET_URL); //await console.log(result2); //外部サイトであれば無視 if (result2 != -1){ var result = removeDuplicates(datas); items[r] = result[i] ; r = r + 1; }; await console.log(items); }; await page.goto(url,{waitUntil:"domcontentloaded"}); await console.log(items[r]); await downloadRec(items[r+1],level+1,i+1); await console.log(downloadRec); }; //---------------------------------------------------------------------------- await downloadRec(TARGET_URL,0,0); }catch(e){ console.log("Error"); console.log(e); } });
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/13 10:02