Парсер многостраничного сайта - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д