//закрытый асинхр метод, который контролирует процесс парсинга private async void Worker() { //прогоняем цикл от стартовой до конечной настроек for (int i = parserSetings.StartPoint; i <= parserSetings.EndPoint; i++) { if (!isActive) { //вызов события информирует о конце работы парсера OnCompleted?.Invoke(this); return; } //получаем исходный код страници с индексом из цикла var source = await loader.GetSourceByPageId(i); var domParser = new HtmlParser(); //спарсим асинхронно код и получим док с которым можно работать var document = await domParser.ParseAsync(source); //передаём док в парсер и записываем в переменную var result = parser.Parse(document); //вызов события которрое передаёт ссылку и результат OnNewData?.Invoke(this, result); } //вызов события информирует о конце работы парсера OnCompleted?.Invoke(this); isActive = false; }
//Работа парсера private async void Worker() { int pageValue = 1, i = 0; while (i++ < pageValue) { if (!isActive) //Если решили остановить парсер Abort() { OnCompleted?.Invoke(this); return; } var source = await loader.GetSourceByPageId(i); // {CurrentId}=i для реализации перехода по страницам var domParser = new HtmlParser(); var document = await domParser.ParseDocumentAsync(source); var result = parser.Parse(document); //Парсинг необходимых данных if (i == 1) //Парсим количество страниц { var page = document.QuerySelector(".paginator:nth-last-of-type(2)"); if (page != null) { pageValue = int.Parse(page.GetAttribute("title")); } } OnNewData?.Invoke(this, result, i, pageValue); } OnCompleted?.Invoke(this); isActive = false; }
private async void WorkerWithPages(string[] s) { // Просто сохдал лист, в который записываю обработку нескольких страниц(ссылки на них поступают в виде массива строк) List <T> weapSkins = new List <T>(); for (int i = 0; i < s.Length; ++i) { var source = await loader.GetSourceByPageId(s[i]); var domParser = new HtmlParser(); var document = await domParser.ParseDocumentAsync(source); var result = parser.Parse(document); weapSkins.Add(result); } OnNewData?.Invoke(this, weapSkins); OnCompleted?.Invoke(this); }
private async void Worker() { for (int i = parserSettings.StartPage; i <= parserSettings.EndPage; i++) { if (!isActive) { OnCompleted?.Invoke(this); return; } var source = await loader.GetSourceByPageId(i); var domParser = new HtmlParser(); var document = await domParser.ParseDocumentAsync(source); var result1 = parser.Parse(document, "1"); OnNewData?.Invoke(this, result1); } OnCompleted?.Invoke(this); isActive = false; }