Разработка автоматизированной системы классификации товаров по изображениям
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
ine ("Получение категорий с сайта");wB = new WebBrowser ();. ScriptErrorsSuppressed = true;url = "
. GetInnerElements ("table", 0)
. GetInnerElements ("tbody", 0)
. GetInnerElements ("tr",
)
. GetInnerElements ("td", 1)
. GetInnerElements ("div");(var columnDiv in columnDivList)
{. AddRange (columnDiv. GetInnerElements ("div"));
}. WriteLine ("Категории получены с сайта");(categoriesHtmlList);(CategoriesGotEvent! = null)();
}
// /
// / Парсит полученные с молотка категории
// /
// / categoriesHtmlList)
{. WriteLine ("Начался парс категорий");[] LastLevelURL = new string [4];catName;catURL;catClass;catLevel;catSiteId;wholeStopwatch = Stopwatch. StartNew ();(var categoryHtml in categoriesHtmlList)
{
// Stopwatch stopwatch = Stopwatch. StartNew ();= GetName (categoryHtml);= GetURL (categoryHtml);= GetClass (categoryHtml);= GetLevel (catClass);= GetSiteID (categoryHtml);c = null;(catLevel)
{0:
{= new Category (catURL, "this is root", catName, 0, catLevel);[0] = catURL;. Add (c);;
}1:
{= new Category (catURL, LastLevelURL [0], catName, catSiteId, catLevel);[1] = catURL;. Add (c);;
}2:
{= new Category (catURL, LastLevelURL [1], catName, catSiteId, catLevel);[2] = catURL;. Add (c);;
}3:
{= new Category (catURL, LastLevelURL [2], catName, catSiteId, catLevel);[3] = catURL;. Add (c);;
}4:
{= new Category (catURL, LastLevelURL [3], catName, catSiteId, catLevel);. Add (c);;
}: { break; }
}
// stopwatch. Stop ();
// Debug. WriteLine ( ( (double) stopwatch. ElapsedTicks / (double) Stopwatch. Frequency). ToString ());
}. Stop ();. WriteLine ("Время парса всех категорий " + ( (double) wholeStopwatch. ElapsedTicks / (double) Stopwatch. Frequency). ToString () + "с");. WriteLine ("Парс категорий окончен");
}
#region Методы DBEnginevoid ClearTables ()
{. ClearTables ();
}void ClearCategories ()
{. categoryTable. Clear ();
}string ReadSetting (string settingName)
{dbEngine. settingsTable. ReadSetting (settingName);
}
// /
// / Сохраняет ссылки на изображения в БД
// /
// / void SaveImages (Category c)
{. imageTable. Insert (c. categoryImages);
}
// /
// / Загружает ссылки на изображения из БД
// /
// / void LoadImages (Category c)
{. categoryImages = dbEngine. imageTable. GetImagesInCategory (c);
}
// /
// / Сохраняет категории в БД
// / void SaveCategories ()
{. categoryTable. Insert (categories);
}Category GetCategoryById (int id)
{dbEngine. categoryTable. GetById (id);
}
// /
// / Загружает категории из БД
// / void LoadCategories ()
{= dbEngine. categoryTable. GetAll ();(CategoriesGotEvent! = null)();
}
#endregion
#region Работа со списком категорий
// /
// / Возвращает список дочерних категорий (рекурсивная)
// /
// /
// / GetAllChildCategories (Category root)
{ ();. AddRange (. FindAll ((Category category)
{category. parentURL == root. url;
}
)
);count = childs. Count;(count > 0 && root. level < 4)
{(int i = 0; i < count; i++)
{. AddRange (GetAllChildCategories (childs [i]));
}
}childs;
}
// /
// / Возвращает список дочерних категорий
// /
// /
// / GetChildCategories (Category root)
{ ();. AddRange (. FindAll ((Category category)
{category. parentURL == root. url;
}
)
);childs;
}
// /
// / Возвращает категории уровня 0
// /
// / GetRoots ()
{ ();. AddRange (. FindAll ((Category category)
{category. level == 0;
}
)
);roots;
}
#endregion
#region Вспомогательные функцииGetName (HtmlElement e)
{(e. FirstChild! = null && e. FirstChild. FirstChild! = null) return e. FirstChild. FirstChild. InnerText;"";
}GetURL (HtmlElement e)
{(e. FirstChild! = null) return e. FirstChild. GetAttribute ("href"). Replace ("about:", "
}GetClass (HtmlElement e)
{classExpression = new Regex (@"class=. {1} ([\w\d\s] *)", RegexOptions. IgnoreCase | RegexOptions.compiled);match = classExpression. Match (e. OuterHtml);(match. Success)
{match. Groups [1]. Value;
}"";
}GetLevel (string classLevel)
{classExpression = new Regex (@" (\d{1})", RegexOptions. IgnoreCase | RegexOptions.compiled);match = classExpression. Match (classLevel);(match. Success)
{Convert. ToInt32 (match. Groups [1]. Value);
}- 1;
}GetSiteID (HtmlElement e)
{siteIdExpression = new Regex (@" (\d{5,})", RegexOptions. IgnoreCase | RegexOptions.compiled);match = siteIdExpression. Match (e. OuterHtml);(match. Success)
{Convert. ToInt32 (match. Groups [1]. Value);
}- 1;
}
#endregion
// /
// / Получает изображения в категории, в несколько потоков
// /
// / cats)
{. WriteLine ("Запуск потоков парса ссылок на изображения");. getItemCounter = 0;. getItemWorkAmount = cats. Count;preparedList = ThreadHelper. SplitList (cats, getItemThreadCount);(var categories in preparedList)
{thread = new Thread (()
{(var cat in categories)
{. GetItems ();. Sleep (10);
}
}
);. SetApartmentState (ApartmentState. STA);. Start ();. Join (10);
}
}void ParallelSaveImagesToDisk (List cats)
{. WriteLine ("Запуск потоков закачки изображений");. saveImageCounter = 0;. saveItemWorkAmount = cats. Count;initialDirectory = ReadSetting ("initialDirectory");preparedList = ThreadHelper. SplitList (cats, saveItemThreadCount);(var categories in preparedList)
{thread = new Thread (()
{(var cat in categories)
{. SaveImages (initialDirectory);. Sleep (10);
}
}
);. SetApartmentState (ApartmentState. STA);. Start ();. Join (10);
}
}
}
}System;System. Collections. Generic;System. Linq;System. Text;System.net;System. IO;System. Text. RegularExpressions;System. Windows. Forms;System. Threading;System. Diagnostics;grabberMolotok
{class Category
{int id; // ИД категории в системе сайтаint level; // Уровень вложенияstring name; // Названиеstring url; // ссылкаstring parentURL; // ссылка на категорию-родительList categoryImages; // изображения товаров
#region Событияdelegate void CategoryParseCompletedEventHandler ();static event CategoryParseCompletedEventHandler CategoryParseCompletedEvent;delegate void CategoryImageSaveCompletedEventHandler ();static event CategoryImageSaveCompletedEventHandler CategoryImageSaveCompletedEvent;
#endregion
#region КонструкторыCategory (string url, string parentURL, string name, int id, int level)
{. url = url;. parentURL = parentURL;. name = name;. id = id;. level = level;= new List ();
}Category (string url)
{. id = - 1;. level = - 1;. name = null;. url = url;. parentURL = null;= new List ();
}Category ()
{. id = - 1;. level = - 1;. name = null;. url = null;. parentURL = null;= new List ();
}
#endregion
// /
// / Получает список товаров в категории
// / </summary>