Как сканировать Интернет с помощью Node.Js и Puppeteer

Node.js Google Chrome Puppeteer

Как использоватьNode.Jsа такжеPuppeteerСканировать Интернет

оригинал:How To Scrap That Web Page With Node.Js And Puppeteer

автор:Francesco NapoletanoДата выхода: 17.08.2018

Переводчик:Чен ЧанмаоВремя выхода: 20.08.2018

(Пожалуйста, укажите источник)

Если вы похожи на меня,Иногда очень хочется захватить определенную веб-страницу, чтобы получить данные в удобочитаемом формате, или просто нужны данные для других целей.

Я торжественно клянусь, что делаю плохие вещи. (не переводчик)

Я пробовал много раз (например:Guzzleа такжеBeautifulSoupд.), и, наконец, нашел оптимальную схему комбинирования:

  • Node.js
  • Puppeteer (Примечание переводчика: Puppet, является подпроектом Google Chrome, исходный код размещен по адресуGitHub)
  • Blackberry Pi для круглосуточной работы скриптов

PuppeteerЯвляетсяNodeкодовая база, основанная наDevToolsПротокол, обеспечивающий высокоуровневую автоматизацию API для управления Google.ChromeилиChromiumбраузер.PuppeteerПо умолчанию он работает в режиме без интерфейса, но его также можно настроить для запуска Google в интерфейсном режиме.ChromeилиChromiumбраузер.

что это значит?Вы можете использовать Google в своем сервисеChromeЭкземпляр браузера. Разве это не круто~

Давайте посмотрим, как это сделать.

Настройка операционной среды

Как обычно, откройте терминал, создайте папку проекта и запустите команду во вновь созданной папке.npm init.

После выполнения команды в папке создается файлpackage.jsonдокумент. Выполнение заказаnpm i -S puppeteerУстановитьPuppeteer.

Небольшое предупреждение: установитьPuppeteerПолная версия Google будет загружена в процессеChromiumбраузер вnode_modulesсодержание.

не переживай. поскольку1.7.0версия, Google выпустила новуюpuppeteer-coreУстановочный пакет, больше не загружается автоматически Google по умолчаниюChromiumбраузер.

Если вы хотите попробовать это, выполните командуnpm i -S puppeteer-coreВот и все.

puppeteer-coreдаPuppeteerОблегченная версия повторно использует локально установленный браузер или подключается к удаленному браузеру.

Операционная среда готова, поехали!

Перейдите непосредственно к коду и узнайте его

Новое в папке проектаindex.jsфайл, скопируйте следующий код и вставьте его вindex.jsв файле.

const puppeteer = require('puppeteer');
const URL = 'https://coding.napolux.com';

puppeteer.launch({ headless: true, args: ['--no-sandbox', '--disable-setuid-sandbox'] }).then(async browser => {
    const page = await browser.newPage();
    await page.setViewport({width: 320, height: 600})
    await page.setUserAgent('Mozilla/5.0 (iPhone; CPU iPhone OS 9_0_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13A404 Safari/601.1')

    await page.goto(URL, {waitUntil: 'networkidle0'});
    await page.waitForSelector('body.blog');
    await page.addScriptTag({url: 'https://code.jquery.com/jquery-3.2.1.min.js'})

    const result = await page.evaluate(() => {
        try {
            var data = [];
            $('h3.loop__post-title').each(function() {
                const url = $(this).find('a').attr('href');
                const title = $(this).find('a').attr('title')
                data.push({
                    'title' : title,
                    'url'   : url
                });
            });
            return data; // 返回数组
        } catch(err) {
            reject(err.toString());
        }
    });

    // 关闭浏览器
    await browser.close();

    // 记录播客标题
    for(var i = 0; i < result.length; i++) {
        console.log('Post: ' + result[i].title + ' URL: ' + result[i].url);
    }
    process.exit();
}).catch(function(error) {
    console.error('No way Paco!');
    process.exit();
});

Эти коды реализуют функцию сканирования сайта. Полный код проекта размещен по адресуGitHub.

Копни немного глубже и узнай, почему

Приведенный выше код сканирует заголовки и ссылки всех сообщений на моем блоге. Мы модифицировали пользовательский агент (UA), чтобы имитировать процесс сканирования как просмотр старого iPhone.

Для облегчения работы обхода положимjQueryВстраивается в веб-страницу, чтобы можно было легко использовать селекторы CSS.

Давайте посмотрим на код построчно:

  • Строки 1-2: вызовPuppeteerмодуль, укажите адрес веб-сайта для сканирования.
  • Строка 4: ВыполнитьPuppeteer. Помните, что мы异步王国, все операции являются асинхронными, в противном случае это синхронная операция, и вам нужно дождаться окончания операции, прежде чем выполнять следующую строку кода. Как видите, параметры конфигурации говорят сами за себя, наш скрипт гуглится без интерфейсаChromiumработает в браузере.
  • Строки 5-10: Запустите браузер, откройте веб-страницу, настройте отображение веб-страницы в размере экрана мобильного телефона и настройте браузер на использование поддельного UA. Подождите, пока страница загрузится, пока селектор CSSbody.blogпоявляться.
  • Строка 11: Как и выше, поместитеjQueryВводить на веб-страницу.
  • Линия 13-28: мы используемjQueryМэджик, извлеки нужные нам данные.
  • Строки 31-37: Закройте браузер. распечатать данные.

Выполнить команду в папке проектаnode index.js, вы увидите такой вывод:

Post: Blah blah 1? URL: https://coding.napolux.com/blah1/
Post: Blah blah 2? URL: https://coding.napolux.com/blah2/
Post: Blah blah 3? URL: https://coding.napolux.com/blah3/

(Выполнение заказаnode index.js, переводчик увидит следующий вывод)

Post: How to scrap that web page with Node.js and puppeteer URL: https://coding.napolux.com/how-to-scrap-web-page-nodejs-puppeteer/
Post: How to find ideas for beer money? URL: https://coding.napolux.com/how-to-find-ideas-for-beer-money/
Post: This is the kind of automation I like! URL: https://coding.napolux.com/this-is-the-kind-of-automation-i-like/
Post: Some tips from when you work from home URL: https://coding.napolux.com/some-tips-from-when-you-work-from-home/
Post: How to find a cofounder for your startup URL: https://coding.napolux.com/how-to-find-a-cofounder-for-your-startup/
Post: Software Industry VS anything else URL: https://coding.napolux.com/software-industry-vs-anything-else/
Post: Some of my GitHub repositories URL: https://coding.napolux.com/some-of-my-github-repositories/
Post: How to use Docker for easy and fast WordPress development URL: https://coding.napolux.com/how-to-use-docker-for-wordpress-development/

Описание реферата статьи

Добро пожаловать в мир рептилий. Легче, чем вы думали, верно? Веб-скрапинг — спорный вопрос, помните, что парсить нужно только авторизованные сайты.

Может ли он сканировать ваш сайт? так какВеб-сайтвладелеця не уполномочивал тебя на это.

Оставьте домашнее задание для практики: как его сканировать и использоватьAJAXстраница! 😉