Html Agility Pack

Вибір парсеру

Побіжний огляд Html Agility Pack

Довідку з бібліотеки можна завантажити на сторінці проекту. Функціонал насправді дуже тішить. Усього нам доступно двадцять основних класів:

agility

  • Linq to Objects (via LINQ to Xml)
  • XPATH
  • XSLT

Парсим хабр!

Вакансії на хабрі представлені у вигляді таблиці, у рядках дана інформація про потрібну спеціальність та зарплату, але так як нам потрібна інформація про освіту, то доведеться переходити на сторінку вакансії та розбирати її. Отже, почнемо, нам потрібна таблиця, щоб витягнути звідти посилання та інфу про позицію із зарплатою:

  1. static void GetJobLinks (HtmlDocument html)
  2. var trNodes=html. GetElementbyId ("job-items"). ChildNodes. Where ( x => x. Name == «tr») ;
  3. foreach (var item in trNodes)
  4. var tdNodes = item. ChildNodes. Where ( x => x. Name == «td» ) . ToArray();
  5. if ( tdNodes. Count ( ) != 0 )
  6. var location = tdNodes [2]. ChildNodes. Where ( x => x. Name == «a») . ToArray();
  7. jobList. Додати (новий HabraJob ()
  8. Url = tdNodes [0]. ChildNodes. First(). Attributes [ "href"] . Value ,
  9. Title = tdNodes [0]. FirstChild. InnerText ,
  10. Price = tdNodes [1]. FirstChild. InnerText ,
  11. Country = location [0]. InnerText ,
  12. Region = location [2]. InnerText ,
  13. City = location [2]. InnerText
  14. > );
  15. >
  16. >
  17. >

  1. static void GetFullInfo (HabraJob job)
  2. HtmlDocument html = new HtmlDocument();
  3. html. LoadHtml (wClient.DownloadString (job. Url));
  4. // html.LoadHtml(GetHtmlString(job.Url));
  5. // так делать нельзя :-(
  6. змінна таблиця = html. GetElementbyId ( «main-content» ) . ChildNodes [ 1 ] . ChildNodes [ 9 ] . ChildNodes [ 1 ] . ChildNodes [ 2 ] . ChildNodes [ 1 ] . ChildNodes [ 3 ] . ChildNodes . Де ( x => x. Ім’я == «tr» ) . ToArray ( );
  7. foreach ( var tr у таблиці )
  8. рядкова категорія = tr. ChildNodes . FindFirst ( «th» ) . InnerText ;
  9. перемикач (категорія)
  10. справа «Компания» :
  11. робота. Компанія = тр. ChildNodes . FindFirst ( «td» ) . FirstChild . InnerText ;
  12. перерва ;
  13. справа «Образование:» :
  14. робота. Освіта = HabraJob. ParseEducation ( tr. ChildNodes . FindFirst ( «td» ) . InnerText ) ;
  15. перерва ;
  16. справа «Занятость:» :
  17. робота. Працевлаштування = HabraJob. ParseEmployment ( tr. ChildNodes . FindFirst ( «td» ) . InnerText ) ;
  18. перерва ;
  19. за замовчуванням:
  20. продовжити ;
  21. >
  22. >
  23. >

Результаты

Ну а далі, зберігаємо результати в XML і дивимося в Excel-e, що ж вийшло… і бачу, що нічого хорошого не вийшло, тому що більшість компаній або не вказують розмір зарплати, або не вказують інформацію про освіту (забувають, вказують в теле). вакансії, або дійсно неважливо), либо не вказують все відразу. Кому цікаво, ось результати в xlsx , а тут вихідник. Про те, як використовувати інтернет-магазин тут. Про те, як переглянути сайти за допомогою SlimerJS тут.