Парсинг вакансий на Upwork с использованием Node.js
Смотрите исходный код
Простой способ сделать это
Мне нравится простота! Кто не любит простоту, верно? Итак, один из способов решить эту проблему выглядит так:
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
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.