Skip to content

Maxmasx/nsreg-watcher

 
 

Repository files navigation

ngreg-watcher

Установка

  1. Скопируйте репозиторий
  2. Установите requirements.txt
  3. Установите Sendmail:
sudo apt install sendemail
  1. Запустить спайдеры:
runspider.sh

Создание спайдера

1.1 Посмотрите пример парсера с использованием композиции: src/grabber/nsreg/spiders/nsreg_zonadomenov.py

# -*- coding: utf-8 -*-
import scrapy

from ..base_site_spider import BaseSpiderComponent


# Пример спайдера для одного сайта
class NsregZonadomenovSpider(scrapy.Spider):
    name = "nsreg_zonadomenov"
    start_urls = ["https://zonadomenov.ru/site/tariffs"]
    allowed_domains = ("zonadomenov.ru")
    # в site_names важно поставить запятую, иначе scrapy вместо целого названия вставит одну букву
    site_names = ("ООО «Зона Доменов»",)

    def __init__(self, name=None, **kwargs):
        super().__init__(name, **kwargs)
        self.component = BaseSpiderComponent(
            start_urls=self.start_urls,
            allowed_domains=self.allowed_domains,
            site_names=self.site_names,
            regex=r"([0-9]+[.,\s])?руб",
            path={
                'price_reg': 'full/Xpath/1/text()', # например '/html/body/section/div/div/div/div[2]/div[3]/div[2]/span/text()'
                'price_prolong': 'full/Xpath/2/text()',
                'price_change': 'full/Xpath/3/text()'
            }
        )

    # Метод для обработки ответов на запросы
    def parse(self, response):
        # Применение метода parse компонента BaseSpiderComponent
        return self.component.parse(response)
  1. Если вам требуется добавить разные регулярные выражения для каждого из полей, то в поле regex записывается такой dict:
regex = {
    'price_reg': 'your_regex1',
    'price_prolong': 'your_regex2',
    'price_change': 'your_regex3'
}
  1. В сложных случаях, когда требуется пройтись по разным страницам внутри сайта, вам необходимо переписать функцию parse. Для прохода по разным страницам лучше всего добавить соответствующую функцию:
from nsreg.items import NsregItem()
EMPTY_PRICE = {
    'price_reg': None,
    'price_prolong': None,
    'price_change': None,
}

...

def parse_price_change(self, response):
        price_change = response.xpath(self.component.path['price_change']).get()
        price_change = find_price(, price_change)

        item = NsregItem()
        item['name'] = "ООО «Ваш ООО»"
        price = item.get('price', EMPTY_PRICE)
        price['price_change'] = price_change
        item['price'] = price
        price['price_change'] = price_change
        item['price'] = price

        yield item

А также вызвать ее из функции parse:

def parse(self, response):
    price_reg = response.xpath(self.pathreg).get()
    price_reg = self.find_price(self.regex_reg, price_reg)

    price_prolong = response.xpath(self.pathprolong).get()
    price_prolong = self.find_price(self.regex_prolong, price_prolong)

    yield scrapy.Request('https://2domains.ru/domains/transfer', callback=self.parse_price_change)

    site_name = self.site_names[0]

    item = NsregItem()
    item['name'] = site_name
    price = item.get('price', EMPTY_PRICE)
    price['price_reg'] = price_reg
    price['price_change'] = price_change
    item['price'] = price

Развертывание приложения на Linux

  1. Установите Sendmail, docker, docker-compose sudo apt install docker docker-compose
  2. Запустите скрипт по установке зависимостей sh install.sh
    • При возникновении проблем с установкой пакета psycopg2, в файле модифицируйте файл при помощи команды: sed -i 's/psycopg2/psycopg2-binary/' requirements.txt
  3. Создайте файл окружения .env по шаблону env.template
  4. Запустите PostgreSQL при помощи команд: export $(echo $(cat .env | sed 's/#.*//g'| xargs) | envsubst) sudo docker-compose up
  5. Запустите scrapy при помощи команды: sh runspiders.sh
  6. Запустите dev-сервер Django при помощи команды: sh runsite.sh

Развертывание под Windows

Подготовка системы

Для запуска под виндовс в первую очередь необходимо установить и настроить Windows Subsystem for Linux (WSL). Она доступна в системе по умолчанию начиная с версии 2004 (сборка 19041). Подробнее здесь: https://learn.microsoft.com/ru-ru/windows/wsl/install

Также необходимо установить Docker Desktop (гайд: https://docs.docker.com/desktop/install/windows-install/ )

При скачивании кода проекта обратите внимание на Unix- и Windows-окончания файлов. Рекомендую скачивать через git clone либо git init + git remote + git pull, чтобы избежать проблем. Либо воспользуйтесь утилитой dos2unix: sudo apt-get install dos2unix, затем в папке с приложением dos2unix *

Настройка окружения

  1. Установите Sendmail, docker, docker-compose sudo apt install sendemail docker docker-compose
  2. Запустите скрипт по установке зависимостей bash install.sh
    • При возникновении проблем с установкой пакета psycopg2, в файле модифицируйте файл при помощи команды: sed -i 's/psycopg2/psycopg2-binary/' requirements.txt
  3. Создайте файл окружения .env по шаблону:
# DOCKER-COMPOSE POSTGRES SETTINGS
HOSTNAME_DB=localhost
USERNAME_DB=nsreg
PASSWORD_DB=Nsreg123
DATABASE_NAME=nsreg
PORT_DB=50432
DOCKER_POSTGRES_PORTS_DB=50432:5432

# SENDMAIL SETTINGS
[email protected]
[email protected]
EMAIL_SMTP=smtp.gmail.com:587
[email protected]
EMAIL_PASS=Nreg123

# DJANGO SETTINGS
DJANGO_SECRET_KEY='django-insecure-5irxqgp-i8c)jp&f3*%ubm(-u@1a3f^fb^_nete-@ixdb3ek4a'
  1. Запустите PostgreSQL при помощи команд: export $(echo $(cat .env | sed 's/#.*//g'| xargs) | envsubst) sudo docker-compose up
  2. Запустите scrapy при помощи команды: bash runspiders.sh
  3. Запустите dev-сервер Django при помощи команды: bash runsite.sh

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 87.5%
  • HTML 11.2%
  • Other 1.3%