CoderCastrov logo
CoderCastrov
Разработка веб-сайтов

Парсинг веб-страниц с использованием node.js

Парсинг веб-страниц с использованием node.js
просмотров
3 мин чтение
#Разработка веб-сайтов
Table Of Content

    Небольшой скрипт на JavaScript для парсинга изображений с Bing.

    Logo do node.js

    Привет, ребята! Как дела? Надеюсь, все хорошо, потому что сегодня мы сделаем крутой скрипт :), научимся парсить изображения с помощью node.js. Но что такое парсинг? Вкратце, это специализированный скрипт или "бот", который ищет определенную информацию для вас или для вашего приложения. Эта статья на Wikipedia очень хорошо подходит для тех, кто хочет узнать больше об этом.

    Итак, как мы сделаем это? Сначала давайте разберемся в некоторых вещах. Наш скрипт будет искать изображения на Bing Images. "Аааа, почему не на Google Images?" Чтобы использовать API Google, сначала нам нужен аккаунт в Google Cloud, нужно настроить поисковый механизм и многое другое, что занимает время, а с Bing поиск происходит быстрее, чем у Google, и намного проще использовать его.

    И еще одна вещь, наш бот будет возвращать URL, то есть путь к желаемому фото, как сохранить или какой путь дать, оставляю это на ваше усмотрение, помните только, что фотографии могут быть защищены авторскими правами, поэтому, пожалуйста, укажите ссылки и все остальное.

    Фото

    Хорошо, перейдем к коду, сначала создайте папку для нашего скрипта и установите нашу единственную зависимость, нам понадобится эта зависимость для выполнения запросов и создания нашего бота ;).

    mkdir imagefinder
    cd imagefinder
    npm install images-scraper  

    После создания каталога и установки зависимости создайте новый файл JavaScript, и теперь начинается веселье.

    Сначала мы импортируем нашу зависимость (строка 1). И после импорта мы создаем экземпляр этой зависимости в переменной, я назвал ее bingImages (строка 2).

    const ImageScraper = require('bing-image-scraper')
    const bingImages = new ImageScraper()

    Теперь, когда у нас есть все, что нам нужно, давайте создадим основную функцию с именем "imageFinder", помните, что так как мы делаем запрос за пределами нашей машины, эта функция должна быть асинхронной.

    async function imageFinder () {
    }

    Теперь начинается самое интересное.

    Meme do gatinho digitando, mad typing.

    Чтобы использовать механизм, просто используйте переменную, которую мы создали, и используйте метод ".list()", передавая параметры keyword (ключевое слово для поиска) и num (количество результатов, то есть сколько изображений код будет искать). Код будет выглядеть так:

    async function imageFinder () {
        await bingImages.list({
            keyword: 'banana',
            num: 2
        })
    }

    Работает уже? Хмммм, нет. Эта функция вернет промис, поэтому мы должны обработать его и вывести URL в нашей консоли, это то, что мы хотим, верно? Конечно, мы обработаем ошибку, очень просто. Поскольку мы получаем промис, мы используем метод ".then()" для получения ответа (res) и метод ".catch()" для обработки возможных ошибок.

    async function imageFinder () {
        await bingImages.list({
            keyword: 'banana',
            num: 2
        }).then(function (res) {
            // Ответ, который вернет Bing, будет массивом объектов, содержащих URL и информацию об изображении
            console.log('Получение изображения: ' + res[1].url )
        }).catch(function (err) {
            console.log('Изображение не найдено ' + err)
        });
    }
    
    imageFinder()

    Самое любопытное, что я обнаружил, заключается в том, что если вы попытаетесь вывести первую позицию массива ответа, он вернет "[object Object]", поэтому я попросил вывести позицию 1 и только URL "console.log(res[1].url)", и самое странное в том, что даже если вы запросите 2 результатов, он вернет URL в позиции 1, если запросить 3, он вернет 2 и так далее.

    Resposta da requisição.

    Полный код вы можете найти здесь:

    Итак, мой юный падаван, понравилась эта магия с node.js? Представьте, сколько возможностей и интересных вещей мы можем сделать с этими знаниями, можно создать автоматизированный поисковик мемов, это же круто.

    Это все, что у меня есть для вас сегодня, следующие посты могут быть о текстовом майнинге на Википедии, что вы думаете? Оставьте комментарий, мне будет интересно услышать новые идеи!