Я создаю небольшой скребок, который очищает страницу результатов поиска для ссылок, а затем нажимает на каждую ссылку, чтобы очистить детали с получившейся страницы.Так что пока у меня есть два скребка.Один очищает страницу результатов, другой очищает страницу одного результата.Это усеченный скребок для страницы результатов:
const puppeteer = require('puppeteer');
var URLList = new Array;
let scrapeResults = async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('www.******.com/search_result');
await page.waitFor(1000);
const RESULT_SELECTOR ='#innerLeft ';
const RESULT_CLASS = 'dspListings2';
// scrape result page for URLs and put them in global URLList for further processing
URLList.push(results);
browser.close();
};
scrapeResults();
, а это скребок для отдельной страницы результатов (после нажатия ссылки):
var details=''; //to be populated by scrapeListings function
const puppeteer = require('puppeteer');
URLList = [url1, url2, url3] // URLList is populated by the scrapeResults() function
URLList.forEach(async (url) => {
const scrapeResultDetails = async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(url);
await page.waitFor(1000);
const RESULT_DETAILS_SELECTOR = '#details_layout > p';
// scrape for result details
// assign result details to global details variable for further processing
details = resultDetails;
browser.close();
};
scrapeResultDetails();
});
Страница результатов возвращает списокURL-адреса, которые я затем хочу передать второму скребку, чтобы цикл forEach
открывал каждый URL-адрес в списке для очистки деталей.
ПРОБЛЕМА Проблема в том, что я не могу вызватьвторой скребок, как это в первом.Оба имеют async wait
, и это вызывает ошибки.Например, это то, что я пытался, и это не работает:
const puppeteer = require('puppeteer');
var URLList = new Array;
var details=''; //to be populated by scrapeListings function
let scrapeResults = async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('www.******.com/search_result');
await page.waitFor(1000);
const RESULT_SELECTOR ='#innerLeft ';
const RESULT_CLASS = 'dspListings2';
// scrape result page for URLs and put them in global URLList for further processing
URLList.push(results);
browser.close();
URLList.forEach(async (url) => {
const scrapeResultDetails = async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(url);
await page.waitFor(1000);
const RESULT_DETAILS_SELECTOR = '#details_layout > p';
// scrape for result details
// assign result details to global details variable for further processing
details = resultDetails;
browser.close();
};
scrapeResultDetails();
});
};
scrapeResults();
Любые идеи ???Кроме того, это где я должен объявить свои глобальные переменные для циклов?