- Скопируйте репозиторий
- Установите requirements.txt
- Установите Sendmail:
sudo apt install sendemail
- Запустить спайдеры:
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)
- Если вам требуется добавить разные регулярные выражения для каждого из полей, то в поле regex записывается такой dict:
regex = {
'price_reg': 'your_regex1',
'price_prolong': 'your_regex2',
'price_change': 'your_regex3'
}
- В сложных случаях, когда требуется пройтись по разным страницам внутри сайта, вам необходимо переписать функцию 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
- Установите Sendmail, docker, docker-compose
sudo apt install docker docker-compose
- Запустите скрипт по установке зависимостей
sh install.sh
- При возникновении проблем с установкой пакета psycopg2, в файле модифицируйте файл при помощи команды:
sed -i 's/psycopg2/psycopg2-binary/' requirements.txt
- При возникновении проблем с установкой пакета psycopg2, в файле модифицируйте файл при помощи команды:
- Создайте файл окружения
.env
по шаблонуenv.template
- Запустите PostgreSQL при помощи команд:
export $(echo $(cat .env | sed 's/#.*//g'| xargs) | envsubst)
sudo docker-compose up
- Запустите scrapy при помощи команды:
sh runspiders.sh
- Запустите dev-сервер Django при помощи команды:
sh runsite.sh
Для запуска под виндовс в первую очередь необходимо установить и настроить 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 *
- Установите Sendmail, docker, docker-compose
sudo apt install sendemail docker docker-compose
- Запустите скрипт по установке зависимостей
bash install.sh
- При возникновении проблем с установкой пакета psycopg2, в файле модифицируйте файл при помощи команды:
sed -i 's/psycopg2/psycopg2-binary/' requirements.txt
- При возникновении проблем с установкой пакета psycopg2, в файле модифицируйте файл при помощи команды:
- Создайте файл окружения
.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'
- Запустите PostgreSQL при помощи команд:
export $(echo $(cat .env | sed 's/#.*//g'| xargs) | envsubst)
sudo docker-compose up
- Запустите scrapy при помощи команды:
bash runspiders.sh
- Запустите dev-сервер Django при помощи команды:
bash runsite.sh