Проблема со скребком кукловода - PullRequest
1 голос
/ 28 февраля 2020

У меня есть необходимость очистить список из 113 URL-адресов, чтобы собрать Title , ImageURL и Content из этих URL-адресов и поместить их в JSON / Текстовый файл для импорта позже.

Но я не могу заставить его работать должным образом. Теперь я заставил l oop работать, как go для URL, но возвращаемые результаты не определены, не уверен, почему возвращаемые данные не поступают.

Могу ли я получить помощь по этому вопросу?

РЕДАКТИРОВАТЬ

const puppeteer = require('puppeteer');

let scrape = async (i, url) => {
const browser = await puppeteer.launch({
    headless: false // Show Browser
});

// Load a new page
const page = await browser.newPage();

// Set viewport size
await page.setViewport({ width: 1366, height: 768, deviceScaleFactor: 1 });

// Go to URL
await page.goto(`${url}`, { waitUntil: 'networkidle2' });

// Run the scrape over the page
const results = await page.evaluate(() => {
    // H2 Heading
    let title = document.querySelector('div.wsite-section-elements > h2.wsite-content-title').innerText;
    // Image
    let imageURL = document.querySelector('div.wsite-section-elements > div > div > a> img').getAttribute('src');
    // Paragraph
    let txtContent = document.querySelector('div.wsite-section-elements > div.paragraph').innerText;

});

//Close Browser
await browser.close();

// Return scrape results
return results;
};

(async () => {
// Pages to scrape
let pageURLs = ['https://www.bibleed.com/the-divine-origin-of-the-bible.html','https://www.bibleed.com/the-bible-our-guide.html'];

for(let i = 0; i < pageURLs.length; i++)
{
    await scrape(i, pageURLs[i]).then((value) => {
        console.log(i, ': ', value);
    });
}

// Write to file
//const fs = require('fs');
//fs.writeFileSync('webScrape3.txt', JSON.stringify(result), err => err ? console.log(err): null);
})();

Ответы [ 2 ]

0 голосов
/ 29 февраля 2020

Это не вопрос кукловода. Вы ничего не возвращаете из дома.

const puppeteer = require('puppeteer');

let scrape = async (i, url) => {
const browser = await puppeteer.launch({
    headless: false // Show Browser
});

// Load a new page
const page = await browser.newPage();

// Set viewport size
await page.setViewport({ width: 1366, height: 768, deviceScaleFactor: 1 });

// Go to URL
await page.goto(`${url}`, { waitUntil: 'networkidle2' });

// Run the scrape over the page
const results = await page.evaluate(() => {
    // H2 Heading
    let title = document.querySelector('div.wsite-section-elements > h2.wsite-content-title').innerText;
    // Image
    let imageURL = document.querySelector('div.wsite-section-elements > div > div > a> img').getAttribute('src');
    // Paragraph
    let txtContent = document.querySelector('div.wsite-section-elements > div.paragraph').innerText;

    return { title, imageURLm txtContent };

});

//Close Browser
await browser.close();

// Return scrape results
return results;
};

(async () => {
// Pages to scrape
let pageURLs = ['https://www.bibleed.com/the-divine-origin-of-the-bible.html','https://www.bibleed.com/the-bible-our-guide.html'];

for(let i = 0; i < pageURLs.length; i++)
{
    await scrape(i, pageURLs[i]).then((value) => {
        console.log(i, ': ', value);
    });
}

// Write to file
//const fs = require('fs');
//fs.writeFileSync('webScrape3.txt', JSON.stringify(result), err => err ? console.log(err): null);
})();
0 голосов
/ 28 февраля 2020

Вы создаете переменную pamphletData внутри for-l oop, которая недоступна за ее пределами. Поэтому, когда вы делаете JSON.stringify(pamphletData), вы на самом деле делаете JSON.stringify(undefined).

...