Skip to content

oldhroft/travel_scraper

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Инструкция по работе со скрапером

Разворачиваем локально

Убедиться, что на установлен python3.8

Рекомендую использовать pyenv, т.к. на нем построено все в облаке. Да и вообще, полезная штука

Для того, чтобы установить python3.8.10 с помощью pyenv,

pyenv install 3.8.10

После этого в директории с проектом автоматически будет использоваться нужная версия питона. Она указана в файле .python-version

cd travel_scraper
python --version

Должно выдать 3.8.10

Для сборки проекта используется poetry. Рекомендую установить его в какой-нибудь внешний питон

pip install poetry

Возможно придется добавить команду poetry в PATH - через .bash_profile, .zprofile, .zsh_profile (чтобы команда была доступна при перезагрузке терминала)

Дальше все просто. Переходим в проект, и устанавливаем окружение

cd travel_scraper
poetry install

Вуаля, окружение готово

Запуск любых команд в окружении можно делать с помощью poetry run

Например, запуск тестового файла (main.py) в этом окружении

poetry run python main.py

Настройка Selenium и интеграции с облаком

Для того, чтобы работать, нужно установить драйвер Chrome и браузер Chrome

Как это сделать - можно найти в Интернете

После этого нужно создать файл с секретами secrets.sh

export CHROME_PATH="/usr/bin/chromedriver"
export AWS_ACCESS_KEY_ID="******"
export AWS_SECRET_ACCESS_KEY="*****"
export AWS_ENDPOITNT_URL="https://storage.yandexcloud.net"
export AWS_REGION_NAME="********"
export AWS_BUCKET="*******"

CHROME_PATH - путь к драйверу хрома, выглядит примерно так, но может отличаться Остальное - секреты для доступа к S3 - нужно запросить у меня

Далее для запуска чего-либо предварительно нужно добавить переменные в окружение

source secrets.sh

Разработка

Здесь все стандартно, создаем свою ветку, пилим свои изменения

Наиболее вероянтный сценарий - новый парсер

Соответственно добавляем новый файл parser.py (вместо parser - название)

Главное что нужно добавить в файл - функция parse_with_params

@add_meta("https://website.co")
def parse_with_params(browser: webdriver.Chrome, *, country_code: str, nights: str, debug: bool = False):
    some_stat = {"url": "final_url.com"}
    return browser.page_source, some_stat

browser - инстанс браузера селениума (он же иногда называется driver)

country_code: str, nights: str - параметры парсинга

debug: bool - переменная, которая отвечает за режим дебага. Обычно в таком режиме браузер никуда не скроллит, просто выполняет какие-то минимальные действия, чтобы убедиться, что все работает

browser.page_source - собственно самая HTML-страница

some_stat - словарь с любой информацией дополнительной, которую хочется сохранить. Рекомендую сохранять туда отформатированную url, по которой выполнялся запрос

Второе, что нужно добавить в файл - функция grid_option - которая превращает параметры из конфигурации в grid_option

Для чего это сделано - для того, чтобы добавлять кастомные настройки в сетку (например, задавать шаги, определять зависимые параметры)

Если не хочется заморачиваться, просто добавляем стандартную функцию

def grid_option(grid_config: dict) -> list:
    grid = create_grid(grid_config)

    return grid

Такая функция превратит конфигурацию сетки

grid_config = {
    "num_nights": [5, 6,],
    "country": ["UAE", "Thailand"]
}

В готовую сетку (то есть выполняется декартово произвденеи в конфигурации)

grid = grid_option(grid_config)
grid = [
    {"num_nights" : 5, "country" : "UAE"},
    {"num_nights" : 5, "country" : "Thailand"},
    {"num_nights" : 6, "country" : "UAE"},
    {"num_nights" : 6, "country" : "Thailand"},
]

Для целей предварительного тестирования в файле scraper.py закоментить dump_result_and_meta_s3 и откоментить dump_result_and_meta

Результаты будут сохраняться локально

Хорошо, все готово, теперь добавляем конфигурацию с названием своего парсера в config.yaml

И запускаем парсер

poetry run run_selenium --parser <your-parser> 

Готово

Deployment

Делаем pull-request, пишем мне указывваем какую строчку в конфиге деплоить

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages