Этот раздел можно вырезать из своего репозитория
- В этой инструкции могут встречаться параметры в
< >
. Всё, что находится внутри скобок должно быть единым текстом, все проблемы и тире должны быть заменены на_
. Например<source name>
означает, что тут должно быть уникальное имя источника. - Парсер должен быть протетирован перед передачей в платформу.
- Парсер должен перехватывать только те ошибки и exception, которые он непосредственно обрабатывает. Всё остальное должно пропускаться во вне парсера, их поймает и обработает платформа
- Все перехватываемые ошибки должны быть ожидаемыми. Например, если нам нужен
title
, а парсинг этой области вызывает ошибку, тогда нужно либо пропустить эту страницу/документ или выкинуть ошибку парсинга.
- Все перехватываемые ошибки должны быть ожидаемыми. Например, если нам нужен
- Необходимо слить изменения мз
dev
ветки вmain
ветку. - Из
main
ветки нужно удалить все лишние файлы. - Из
main
ветки сделать релиз, с кратким описанием изменений и обновленным тегом. - Передать ссылку на репозиторий админу платформы.
Файлы помеченный (*)
являются обязательными для платформы. Остальные не обрабатываются. Они служат для удобства написания и тестирования плагина.
└── NSPK-DI-SPP-plugin-<source name>
├── src
│ └── spp
│ └── types.py # Содержит датакласс SPP_document. Объект, который необходимо использовать при заполнении списка документов источника
├── .gitignore # Содержит информацию о том, что не должен обрабатывать git (например, метаданные IDE и виртуальные окружения python)
├── LICENSE # Лицензия MIT
├── readme.md # Инструкция по созданию плагинов
├── <source name>.py # (*) Класс парсера
└── SPPfile # (*) Файл конфигурации для платформы. переименовывать нельзя
При использовании шаблона, новый репозиторий стоит назвать так:
NSPK-DI-SPP-plugin-<source name>
Для удобства запуска и тестирования работы парсера можно создать main.py
файл в корне репозитория. main.py
файл можно хранить в репозитории, но только в ветке dev
. Перед добавлением парсера в платформы нужно изменения из ветки dev
вливаются в ветку master
с удалением всех сторонних файлов.
Для тестирования журналирования logging
нужно перед инициализацией класса парсера вставить следующие строки.
from logging import config
config.fileConfig('dev.logger.conf')
В корне репозитория создать файл dev.logger.conf
[loggers]
keys=root
[handlers]
keys=console
[formatters]
keys=dev
[logger_root]
handlers = console
level = DEBUG
[handler_console]
class = logging.StreamHandler
level = DEBUG
formatter = dev
[formatter_dev]
format = %(asctime)s.%(msecs)03d %(levelname)s %(module)s : %(message)s
datefmt = %d-%m-%Y %I:%M:%S
Для использования WebDriver в первую очередь нужно настроить класс парсера PARSER_CLASS
. Для этого добавляем параметр webdriver
в конструкторе парсера и сохраняем в свойстве класса
class PARSER_CLASS:
def __init__(self, webdriver, *args, **kwargs):
"""
Конструктор класса парсера
По умолчанию внего ничего не передается, но если требуется (например: driver селениума), то нужно будет
заполнить конфигурацию
"""
# Обнуление списка документов
self._content_document = []
# Webdriver Selenium для парсера
self.driver = webdriver
Теперь в файле main.py
можно создавать webdriver
и передавать его в конструктор класса.
from selenium import webdriver
driver = webdriver.Chrome()
parser = <PARSER_CLASS>(driver)
docs = parser.content()
print(docs)
Для запуска парсера и просмотра результатов нужно инициализировать класс парсера PARSER_CLASS
и вызвать метод content
в файле main.py
docs = <PARSER_CLASS>().content()
print(docs)
Здесь нужно написать про источник, который обрабатывает плагин
Инструкции и рекомендации для тех, кто будет дорабатывать плагин