Парсер многостраничного сайта - C#
Формулировка задачи:
Здравствуйте, уважаемые программисты.
Обращаюсь к вам с такой проблемой.
Написал парсер для сайта одной игры. Парсер работает отлично, код ниже прилагаю, но есть одна проблема - на сайте больше 6 миллионов страниц, которые мне необходимо прочитать. Последовательный подход, привел к тому, что 100.000 страниц, пропарсил за 10 часов примерно. Предполагаю, что многопоточность помогла бы решить проблему, но не могу понять, как передать метод в потоки. Как сделать правильно? Бьюсь уже не первый день, но видимо рано подошел к идее многопоточности. Если у вас есть советы или идеи, как решить мою проблему, буду сильно благодарен.
Итак, код:
Заранее, спасибо.
Листинг программы
- public partial class Form1 : Form
- {
- int id = 48234;
- string page = @"http://www.heroeswm.ru/pl_info.php?id=";
- WebClient web = new WebClient();
- string pattern = @"Груза доставлено - (\S*[0-9])";
- string pattern2 = @"(\w*)";
- string znach;
- string sborka;
- int convertZnach;
- int iterator=13;
- public Form1()
- {
- InitializeComponent();
- }
- private void Form1_Load(object sender, EventArgs e)
- {
- web.Encoding = UTF8Encoding.Default;
- for (int i = 0; i < 6429691; i++)
- {
- string str = web.DownloadString(page + id);
- Regex regex = new Regex(pattern);
- Match match = regex.Match(str);
- while (match.Success)
- {
- // Т.к. мы выделили в шаблоне одну группу (одни круглые скобки),
- // ссылаемся на найденное значение через свойство Groups класса Match
- znach = match.Groups[1].Value;
- // Переходим к следующему совпадению
- match = match.NextMatch();
- }
- if (!String.IsNullOrEmpty(znach))
- {
- Console.WriteLine("Этот тип был на ивенте! Его АйДи "+id);
- // здесь происходит поиск цифр в полученной при загрузке строке. удаляется запятая и конвертируемый результат, попадает в convertZnach
- Regex regex2 = new Regex(pattern2);
- Match match2 = regex2.Match(znach);
- while (match2.Success)
- {
- sborka += match2.Groups[1].Value;
- match2 = match2.NextMatch();
- }
- convertZnach = Convert.ToInt32(sborka);
- if (convertZnach >= 6000)
- {
- iterator++;
- Console.WriteLine("Этот тип набил больше 6тонн: "+id);
- Console.WriteLine(convertZnach);
- Console.WriteLine(iterator);
- }
- }
- //3990
- convertZnach = 0;
- sborka = null;
- znach = null;
- id++;
- if (id == 6429690)
- {
- MessageBox.Show("Последняя итерация");
- }
- }
- textBox1.Text = "Финиш! Всего прочкошлемных типов:"+iterator;
- }
- }
Решение задачи: «Парсер многостраничного сайта»
textual
Листинг программы
- DownloadStringAsync
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д