コード例 #1
0
        public async Task Scrape <TEntity>() where TEntity : Product, new()
        {
            IProductService <TEntity> _productService = (IProductService <TEntity>)_serviceProvider.GetService(typeof(IProductService <TEntity>));

            var parsedProducts = new List <TEntity>();

            foreach (var shop in _Shops)
            {
                nextPage = true;
                var pageNumber = 0;
                var p          = new BaseParser();
                p.Stop += ScrapeNextPage;

                while (nextPage)
                {
                    pageNumber++;
                    var productData = await _productDataProvider.GetProductData <TEntity>(shop, pageNumber);

                    var parser       = ShopProductParserFactory.GetShopParserInstance <TEntity>(shop);
                    var productsList = parser.ParseHtmlStringToProducts <TEntity>(productData);

                    if (productsList.Count == 0)
                    {
                        ScrapeNextPage(this, EventArgs.Empty);
                    }
                    else
                    {
                        parsedProducts.AddRange(productsList);
                    }
                }
            }

            await _productService.SaveProducts(parsedProducts);
        }