public async void StartParse() { if (StartPage > EndPage) { Informer.RaiseOnResult("Начальная страница не может быть больше конечной!"); return; } using (_writer = File.CreateText(FileName)) { for (var i = StartPage; i <= EndPage; i++) { if (Abort) { Informer.RaiseOnResult("Сканирование прервано!"); return; } var html = await GetSourceByPage(i); var htmlDocument = new HtmlDocument(); htmlDocument.LoadHtml(html); Parse(htmlDocument); Informer.RaiseOnResult($"Готова страница № {i}"); } } Informer.RaiseOnResult("Все страницы просканированы!"); }
private void ParsePages() { try { _parser.ParseUrl = new UriBuilder(UrlTextBox.Text).Uri.AbsoluteUri; _parser.ParsePages(); } catch (Exception) { Informer.RaiseOnResult("Невозможно выполнить разбор имени хоста!"); } }
public async void ParsePages() { try { var html = await _client.GetStringAsync(ParseUrl); var htmlDocument = new HtmlDocument(); htmlDocument.LoadHtml(html); var pagesCount = htmlDocument .DocumentNode.Descendants("a") .Where(node => node.GetAttributeValue("class", "") .Equals("x-pager__item")).ToArray(); PagesParseCompleted?.Invoke(pagesCount.Length != 0 ? int.Parse(pagesCount[pagesCount.Length - 1].InnerText) : 0); } catch (Exception) { Informer.RaiseOnResult("Невозможно выполнить разбор имени хоста!"); } }
private void PagesParseCompleted(int pagesCount) { switch (pagesCount) { case 0: PagesCountLabel.Content = "Данный раздел содержит одну страницу"; Informer.RaiseOnResult("Анализ количества страниц окончен."); PagesCountLabel.Visibility = Visibility.Visible; StartParseButton.Visibility = Visibility.Visible; _parser.StartPage = 1; _parser.EndPage = 1; break; default: _parser.StartPage = 1; _parser.EndPage = pagesCount; PagesCountLabel.Content = $"Данный раздел содержит {pagesCount} страниц."; Informer.RaiseOnResult("Анализ количества страниц окончен."); PagesCountLabel.Visibility = Visibility.Visible; StartParseButton.Visibility = Visibility.Visible; break; } }
private void StartParsePagesButton_OnClick(object sender, RoutedEventArgs e) { Informer.RaiseOnResult("Начинаю анализ количества страниц."); ParsePages(); }
private void StartParseButton_OnClick(object sender, RoutedEventArgs e) { Informer.RaiseOnResult("Начинаю сканирование указанных страниц."); Parse(); }