В server/core/article_parser/article_parser.py ресолвится подходящий парсер из подпапки parsers
Там есть несколько парсеров для соцсетей + базовый парсер, запускающий goose3. Последний в первую очередь старается вычленить из страницы схемы для статей и новостей.
Аналогично устроен server/core/article_parser/source_parser.py за исключением того, что он еще парсит rss-источники.
Когда надо заводить новый парсер
Если текущие парсеры не справляются с распарсингом статей по каким-то урлам
Если для каких-то страниц потребление ресурсов слишком большое, и надо оптимизировать
Как создать новый парсер
Создаешь парсер. Интерфейс у него прописан в server/core/article_parser/parsers/base_parser.py
Рядом кладешь свой парсер, унаследованный от базового
Добавляешь его в список к server/core/article_parser/article_parser.py
Аналогично и для source-парсеров.
В интерфейсе надо реализовать два метода
def can_handle(cls, url: str) -> bool
Определяет, будет ли парсить этот урл
def parse_raw_data(cls, data) -> ArticleData
Парсинг сырого ответа из фетчера
Как устроено сейчас
В
server/core/article_parser/article_parser.py
ресолвится подходящий парсер из подпапки parsers Там есть несколько парсеров для соцсетей + базовый парсер, запускающий goose3. Последний в первую очередь старается вычленить из страницы схемы для статей и новостей.Аналогично устроен
server/core/article_parser/source_parser.py
за исключением того, что он еще парсит rss-источники.Когда надо заводить новый парсер
Как создать новый парсер
Создаешь парсер. Интерфейс у него прописан в server/core/article_parser/parsers/base_parser.py Рядом кладешь свой парсер, унаследованный от базового Добавляешь его в список к server/core/article_parser/article_parser.py
Аналогично и для source-парсеров.
В интерфейсе надо реализовать два метода
def can_handle(cls, url: str) -> bool
Определяет, будет ли парсить этот урлdef parse_raw_data(cls, data) -> ArticleData
Парсинг сырого ответа из фетчера