public void pars_page(string page, int num_of_page) // в цикле парсим всю базу { int f = 0; int tmp = 100; //временная переменная - указываю сколько парсить страниц(*20 = карточек) потом передам переменную num_page for (int i = 1; i <= tmp; i++) // i < = num_of_page { Thread.Sleep(TimeSpan.FromSeconds(5)); // устанавливаем таймаут между парсингом блока страниц иначе может сойти за DoS атаку string evrytPage = page + i; // страница для парсинга адресов карточек string code_page = GosZak.GetPage(evrytPage); // получаем исходный кон int mun = GosZak.ParsPage(code_page); // парсинг this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart) delegate() { f += mun; pbStatus.Maximum = tmp; pbStatus.Value = i; online_status2.Text = $"Обработано карточек - {f} "; online_status1.Text = $"Обработано страниц {i - 1} из {num_of_page}"; DataLoad(); }); } MessageBox.Show($"Парсинг завершен.", "Внимание.", MessageBoxButton.OK, MessageBoxImage.Information); }
public void Pars_Task(string page, int start_page_num, int end_page_num, CancellationToken token) // в цикле парсим всю базу { for (int i = start_page_num; i <= end_page_num; i++) { if (token.IsCancellationRequested) { break; } try { //string code_page = ""; string evrytPage = page + i; // страница для парсинга адресов карточек string code_page = GosZak.GetPage(evrytPage); // получаем исходный код if (code_page != "") { int mun = GosZak.ParsPage(code_page); // парсинг this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart) delegate() { cards += mun; pages += 1; online_status2.Text = $"Обработано карточек - {cards} "; online_status1.Text = $"Обработано страниц {pages} из {num_page}"; }); } } catch (Exception ex) { MessageBox.Show($"Сервер не доступен, ошибка 503 " + ex + "\n Для продолжения нажмите OK"); } } }
public void pars() { string firstPage = "https://goszakupki.by/tenders/posted?page="; // входная точка для парсинга string startPage = firstPage + "1"; // стартовая страница для парсинга string page = GosZak.GetPage(startPage); // получаем код страницы int num_page = int.Parse(GosZak.Pars_Num_Page(page)); // общее количество страниц pars_page(firstPage, num_page); // метод парсинга страниц с адресами карточек }