Дмитрий Нестепук

Блог за програмиране - C #, F #, C ++, Архитектура и др

Преглед на задачата

И така, имаме може би най-„размазаните“ от възможните задачи - получаване, обработка и съхраняване на данни. За какво, за да получим работеща система, трябва да знаем

  • Къде са данните и как да ги осъществим правилно
  • Как да обработвате данни, за да получите само това, от което се нуждаете
  • Къде и как да съхранявате данни

Източници на данни

Нека да разгледаме източниците на данни, от които трябва да получите информация:

  • Форуми
  • Twitter
  • Блогове
  • Новини сайтове
  • Каталози, листинги
  • Обществени уеб услуги
  • Приложен софтуер

Друг проблем е, че понякога съдържанието се зарежда динамично чрез AJAX, което налага наличието на различни видове ‘stateful’, за да се получи съдържание точно когато е налично.

Обработка на данни

Обработката на данни е най-трудоемката и скъпа (от гледна точка на потенциалния клиент) операция. От една страна, може да изглежда, че един и същ HTML трябва да бъде много лесен за анализиране със съществуващите инструменти, но в действителност не е така. Първо, HTML в повечето случаи не е XHTML, с други думи, като направите XElement.Parse (), просто ще получите изключение. Следователно трябва поне да можете да „коригирате“ зле написания HTML.

Дори и с добре оформени данни, пак ще имате много проблеми - в края на краищата всяка повече или по-малко сложна уеб страница е проекция на многоизмерната структура на базата данни на собственика върху едномерно пространство. По този начин възстановяването на връзки и зависимости е необходима задача за съхраняване на получената информация в релационни бази данни.

Хранилище за данни

След като сте получили данните, трябва да ги съхраните някъде. Има много опции за съхранение - с помощта на сериализация, текстови файлове, както и обектно и документно ориентирани, както и разбира се релационни бази данни. Изборът на хранилище в търговска поръчка най-вероятно зависи или от клиента („искаме MySQL“), или от финансовите предпочитания на клиента. При разработката на .Net базата по подразбиране е SQL Server Express. Ако правите хранилище за себе си, можете да използвате всичко, което искате - било то MongoDB, db4o или, например, SQL Server 2008R2 Datacenter Edition.

В повечето случаи хранилищата с данни не изискват особена сложност. потребителите просто проектират базата данни в Excel (добре, или SPSS, SAS и т.н.) и след това използват познати методи за анализ. Опции като SSAS (SQL Server Analysis Services) се използват много по-рядко (поради минималната цена от 7500 долара - вижте тук), но си струва да знаете и за тях.

Малък пример

Нека да разгледаме минимална част от кода, която ще ни помогне да изтеглим и анализираме страницата. За тези задачи ще използваме два пакета:

  • WatiN е библиотека за тестване на уеб интерфейси. Добре е да го използвате за автоматични натискания на бутони, избор на елементи от списък и други подобни. WatiN също предоставя обектен модел за извлечената страница, но не бих го използвал. Има една обща причина - WatiN е нестабилна и много капризна библиотека, която трябва да се използва с повишено внимание (само в 32-битов режим!) За контрол на браузъра.
  • HTML Agility Pack е библиотека за синтактичен анализ на HTML. Самият HTML може да бъде взет от WatiN, изтеглен и дори ако е неправилно оформен, Agility Pack ще ви позволи да търсите и избирате в него с помощта на XPath.

Ето минимален пример за това как можете да използвате тези две рамки заедно, за да получите страница от сайт:

Вероятно е очевидно за вас, че записването на данни в някакво хранилище не се извършва от конзолно приложение. В повечето случаи за това се използва услугата windows. И това, което услугата прави, в повечето случаи е анкетиране, тоест нормативно изтегляне на ресурс и актуализиране на нашето разбиране за него. Изтеглянията обикновено се извършват на интервали от N минути/часове/дни.

За добро поведение при обслужване са ви необходими още няколко полезни трика. Първо, полезно е да добавите възможността за стартиране от конзолата към услуги. Помага при отстраняване на грешки.

Друга полезна функция е саморегистрирането, така че вместо да използвате installlutil, можете да инсталирате услугата чрез myservice/i. За това има отделен клас ...

Инсталационният клас използва познатия System.Configuration.Install монтаж. Използва се директно от Main ():

Е, последната функция е, разбира се, използването на регистрация. Използвам библиотеката log4net и можете да използвате много вкусна функция, наречена ColoredConsoleAppender, за да пишете дневници в конзолата. Самият процес на регистриране е примитивен.

Няколко важни правила

Достатъчно информация за първи път. Накрая искам да ви напомня няколко прости правила:

  • Стартирането на IE изисква апартамент с една нишка; Наистина използвам FireFox. Харесвам FireBug
  • WatiN трябва да се изпълнява в 32-битова програма (x86)
  • Горното проучване не е идеално, защото не отчита факта, че самата WatiN също забавя разбора на HTML - това също не е бърза операция

Говорейки за птици ... вместо услуга, можете по принцип да направите EXE и да го стартирате през разпределителя. Но е някак подредено.

Благодаря ви за вниманието. Следва продължение:)