Разработка автоматизированной системы классификации товаров по их изображениям
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
eLine(((double)stopwatch.ElapsedTicks / (double)Stopwatch.Frequency).ToString());
}.Stop();.WriteLine("Время парса всех категорий " + ((double)wholeStopwatch.ElapsedTicks / (double)Stopwatch.Frequency).ToString() + "с");
Debug.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);
}
///
/// Сохраняет категории в БД
///
public void SaveCategories()
{.categoryTable.Insert(categories);
}Category GetCategoryById(int id)
{dbEngine.categoryTable.GetById(id);
}
///
/// Загружает категории из БД
///
public void LoadCategories()
{= dbEngine.categoryTable.GetAll();(CategoriesGotEvent != null)();
}
#endregion
#region Работа со списком категорий
///
/// Возвращает список дочерних категорий (рекурсивная)
///
///
/// GetAllChildCategories(Category root)
{();.AddRange(.FindAll((Category category)
{category.parentURL == root.url;
}
)
0&&root.level 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;
}
{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("Запуск потоков парса ссылок на изображения");
this.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("Запуск потоков закачки изображений");
this.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
{
public int id; //ИД категории в системе сайта
public 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
///
/// Получает список товаров в категории
///
public void GetItems()
htmlItems=newList();url = this.url;.NavigateFromRequest(url);
{htmlPageCount = wB.WaitElement("tabMainBox", 20000)
.GetInnerElements("div", 0)
.GetInnerElements("div", 0)
.GetInnerElements("div", 0)
(\d*)", RegexOptions.IgnoreCase | RegexOptions.Compiled);match = pageCountRegex.Match(htmlPageCount.OuterHtml);(match.Success)
{= Convert.ToInt32(match.Groups[1].Value);
}
}(NullReferenceException)
{= 1;
}(int i = 1; i <= pageCount; i++)
{(int tries = 0; tries < 5; tries++)
{
{
//Stopwatch watch = Stopwatch.StartNew();.NavigateFromRequest("
.GetInnerElements("div", 1)
.GetInnerElements("table", 0)
.GetInnerElements("tbody", 0)
.GetInnerElements("tr")
);
//watch.Stop();
//Debug.WriteLine(((double)watch.ElapsedTicks / (double)Stopwatch.Frequency).ToString());;
}(NullReferenceException)
{.Sleep(50);
}
}
}(htmlItems);();
}
///
/// Парсит товары в категории
///
///
/// itemsHtmlList)
{.WriteLine("Начался парс товаров");
Regex itemIdRegex = new Regex("data-id=\"([\\d]*)", RegexOptions.IgnoreC