Пример #1
0
        private async Task <ResultItem> CollectItem(ParseItem item)
        {
            var settings = item.ParseSettings;

            var result = new ResultItem {
                Info   = item.Info,
                Result = new PriceResult {
                    Url = item.ParseSettings.Url
                }
            };
            IHtmlDocument document;

            try {
                document = await GetDocument(settings);
            } catch (Exception ex) {
                _logger.Error(ex, $"[{item.ToJson()}] ошибка при загрузке страницы");
                result.Result.Status = ResultStatus.LoadFail;
                return(result);
            }

            var element = document.QuerySelector(settings.ElementSelector);

            try {
                var dirtyPrice = settings.IsContentSelector
                    ? element.InnerHtml
                    : element.Attributes[settings.AttributeName].Value;
                var price = ParseDirtyPrice(dirtyPrice);
                result.Result.Price  = price;
                result.Result.Status = ResultStatus.OK;
                _logger.Info($"[{item.ToJson()}] успешно спарсили страницу: {result.ToJson()}");
            } catch (Exception ex) {
                _logger.Error(ex, $"[{item.ToJson()}] ошибка при парсинге страницы");
                _errorPareslogger.Error(ex, $"[{item.ToJson()}] ошибка при парсинге страницы : {document.ToHtml()}");
                result.Result.Status = ResultStatus.LoadFail;
            }

            return(result);
        }