CoderCastrov logo
CoderCastrov
Парсер

Парсинг вакансий на Upwork с использованием Node.js

Парсинг вакансий на Upwork с использованием Node.js
просмотров
4 мин чтение
#Парсер

Смотрите исходный код

Простой способ сделать это

Мне нравится простота! Кто не любит простоту, верно? Итак, один из способов решить эту проблему выглядит так:

const fs = require('fs');
const http = require('https');
const url = 'https://www.upwork.com/ab/jobs/search/?q=javascript&sort=recency'
http.get(url, (res) => {
    let data = '';
    res.on('data', (chunk) => {
        data += chunk;
    });
    res.on('end', () => {
        // сохраняем данные как файл HTML
        fs.writeFile('upwork.html', data, (err) => {
            if (err) throw err;
            // если найдено совпадение (совпадает ключевое слово вашей работы), отправляем уведомление
            if (parse(data)) {
                sendNotification();
            }
        });
    });
}).on("error", (err) => {
    // обрабатываем ошибку
});

хммм! Не так быстро !!! На шаге 3 появляется Cloudflare!

cloudflare waiting room

Очередь ожидания Cloudflare

Upwork является клиентом Cloudflare, и, как вы могли заметить, Cloudflare не любит ботов! Если вы не знакомы с Cloudflare, это один из крупнейших поставщиков CDN в мире или, по крайней мере, так его больше всего знают, но они также предоставляют множество других услуг, таких как балансировка нагрузки, брандмауэры и т. д., и услуга, которая заблокировала нас сейчас, - это WAF (веб-приложение брандмауэра), брандмауэр, который защищает веб-приложения от вредоносных действий (атаки DDoS, межсайтовый скриптинг) и предоставляет полезные функции, такие как оптимизация производительности, управление кэшем и многое другое. Управление ботами - одна из таких функций. Боты, если их не контролировать, могут нанести много вреда веб-сайтам, потребляя ресурсы и, возможно, вызывая атаку отказа в обслуживании. Поэтому Cloudflare управляет этими матричными существами с помощью анализа поведения и машинного обучения. Но подождите!! А что насчет хороших ботов? Поисковые роботы (Google, Bing), инструменты мониторинга производительности и другие вещи, необходимые для нормального функционирования Интернета! Что ж, Cloudflare различает хороших ботов и плохих ботов, добавляя их в белый и черный списки соответственно. Вы и я, как вы могли догадаться, являемся плохими ботами!!

Выбор конечной точки

Продолжайте с этим разделом, если вы хотите отображать вакансии в виде уведомлений macOS, в противном случае перейдите в репозиторий кода и следуйте инструкциям для использования предпочитаемого вами способа.

Код довольно простой, он просто считывает файл jobs.json и отображает уведомление для каждой вакансии.

Я использовал не очень фантастическую утилиту под названием jq для разбора json и извлечения всех интересных деталей о вакансиях, таких как название, дата размещения, тип, бюджет и ссылка.

Затем я просто прохожу по каждой вакансии и извлекаю отдельные детали для каждой из них. Я использовал еще одну утилиту под названием alerter, которая является оберткой для osascript. osascript испорчен, кстати, настолько испорчен, что вам понадобится некоторая сумасшедшая магия, чтобы он правильно интерпретировал ваши переменные оболочки, alerter предоставляет удобство сказать "нахуй тебе кавычки и обратные слеши". Итак, для каждой вакансии я просто вызываю alerter с деталями вакансии, и он отобразит уведомление с названием вакансии, датой размещения, типом, бюджетом и ссылкой. И если я чувствую себя авантюрным, я могу нажать кнопку "открыть", чтобы посмотреть ссылку на вакансию в браузере Brave.

Уведомление выглядит примерно так:

и если вам нравится предложение, вы можете нажать кнопку "открыть", чтобы открыть ссылку на вакансию в вашем браузере.

Опять же, пост достаточно некрасив и неорганизован, поэтому я не буду включать код для этой части, но вы можете найти его в репозитории GitHub.

Теперь, когда у нас есть наш бот и скрипты уведомлений, настало время автоматизировать процесс, чтобы мы могли расслабиться и позволить боту сделать всю работу за нас. Для этого мы будем использовать что-то под названием cronjobs. Это как маленькие роботы, которые запускают скрипты в заданные времена. Это похоже на найм личного помощника для вашего компьютера!

Сначала добавим bot.js в качестве cronjob. Откройте терминал и введите crontab -e. Это откроет редактор crontab. Поскольку наш скрипт будет сканировать веб-сайт Upwork и заполнять файл jobs.json, я запущу его каждые 7 минут, чтобы убедиться, что я получаю последние вакансии. Поэтому я добавлю следующую строку в файл crontab:

*/7 * * * * node /путь/к/bot.js

Это указывает cronjob запускать скрипт bot.js каждые 7 минут. Вы можете настроить расписание по своему усмотрению - воспользуйтесь этим удобным инструментом, чтобы помочь вам с синтаксисом.

Затем давайте запланируем наш bash-скрипт notifyjobs.sh, который считывает из jobs.json и отображает уведомления.

Поскольку он должен запускаться после скрипта bot.js, мы запланируем его запуск через 3 минуты после скрипта. Поэтому мы добавим следующую строку в файл crontab:

*/10 * * * * /путь/к/notifyjobs.sh

И с этим мы закончили! Мы успешно создали бота для извлечения списка вакансий с Upwork и отображения их в виде уведомлений macOS. Теперь мы можем получать последние обновления вакансий прямо на наших рабочих столах. Больше не нужно бесконечно прокручивать список вакансий - бот делает всю тяжелую работу за нас! Итак, расслабьтесь, отдохните и позвольте боту искать работу за вас. Удачного поиска работы!

Если у вас есть вопросы, сообщение об ошибке, отзыв или просто привет, напишите мне в Twitter.