Парсер многостраничного сайта - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, уважаемые программисты. Обращаюсь к вам с такой проблемой. Написал парсер для сайта одной игры. Парсер работает отлично, код ниже прилагаю, но есть одна проблема - на сайте больше 6 миллионов страниц, которые мне необходимо прочитать. Последовательный подход, привел к тому, что 100.000 страниц, пропарсил за 10 часов примерно. Предполагаю, что многопоточность помогла бы решить проблему, но не могу понять, как передать метод в потоки. Как сделать правильно? Бьюсь уже не первый день, но видимо рано подошел к идее многопоточности. Если у вас есть советы или идеи, как решить мою проблему, буду сильно благодарен. Итак, код:
Листинг программы
  1. public partial class Form1 : Form
  2. {
  3. int id = 48234;
  4. string page = @"http://www.heroeswm.ru/pl_info.php?id=";
  5. WebClient web = new WebClient();
  6. string pattern = @"Груза доставлено - (\S*[0-9])";
  7. string pattern2 = @"(\w*)";
  8. string znach;
  9. string sborka;
  10. int convertZnach;
  11. int iterator=13;
  12. public Form1()
  13. {
  14. InitializeComponent();
  15. }
  16. private void Form1_Load(object sender, EventArgs e)
  17. {
  18. web.Encoding = UTF8Encoding.Default;
  19. for (int i = 0; i < 6429691; i++)
  20. {
  21. string str = web.DownloadString(page + id);
  22.  
  23. Regex regex = new Regex(pattern);
  24. Match match = regex.Match(str);
  25. while (match.Success)
  26. {
  27. // Т.к. мы выделили в шаблоне одну группу (одни круглые скобки),
  28. // ссылаемся на найденное значение через свойство Groups класса Match
  29. znach = match.Groups[1].Value;
  30.  
  31. // Переходим к следующему совпадению
  32. match = match.NextMatch();
  33. }
  34. if (!String.IsNullOrEmpty(znach))
  35. {
  36. Console.WriteLine("Этот тип был на ивенте! Его АйДи "+id);
  37. // здесь происходит поиск цифр в полученной при загрузке строке. удаляется запятая и конвертируемый результат, попадает в convertZnach
  38. Regex regex2 = new Regex(pattern2);
  39.  
  40. Match match2 = regex2.Match(znach);
  41. while (match2.Success)
  42. {
  43.  
  44. sborka += match2.Groups[1].Value;
  45.  
  46. match2 = match2.NextMatch();
  47. }
  48. convertZnach = Convert.ToInt32(sborka);
  49. if (convertZnach >= 6000)
  50. {
  51. iterator++;
  52. Console.WriteLine("Этот тип набил больше 6тонн: "+id);
  53. Console.WriteLine(convertZnach);
  54. Console.WriteLine(iterator);
  55. }
  56. }
  57. //3990
  58. convertZnach = 0;
  59. sborka = null;
  60. znach = null;
  61. id++;
  62. if (id == 6429690)
  63. {
  64. MessageBox.Show("Последняя итерация");
  65. }
  66. }
  67. textBox1.Text = "Финиш! Всего прочкошлемных типов:"+iterator;
  68. }
  69.  
  70. }
Заранее, спасибо.

Решение задачи: «Парсер многостраничного сайта»

textual
Листинг программы
  1. DownloadStringAsync

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.455 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут