public static void shopkzGPU() { Console.OutputEncoding = Encoding.UTF8; bool Loop = true; var url = @"https://shop.kz"; var htmlWeb = new HtmlWeb(); var htmlDoc = htmlWeb.Load(url + "/videokarty/filter/almaty-is-v_nalichii-or-ojidaem-or-dostavim/apply/?PAGEN_1=1"); //Getting links of products var node = htmlDoc.DocumentNode.SelectNodes("//div[@class='bx-catalog-middle-part']//div[@class='bx_catalog_item_title']//a[@href]"); List <string> result1 = new List <string>(); foreach (var ProductsHtmlSeparate in node) { var ItemPage = ((url + ProductsHtmlSeparate.GetAttributeValue("href", null))); List <string> result = ItemPage.Split(new char[] { ',' }).ToList(); //This is bad and I don't like how this is done but I haven't found any way to do this better yet. result1.AddRange(result); } foreach (var itemLink in result1) { var htmlDocLinks = htmlWeb.Load(itemLink); //Model names of GPU var gpuModelName = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Модель')]"); foreach (var linksGPU in gpuModelName) { Console.WriteLine(linksGPU.InnerText); } //Frequency of GPUs var gpuVideoFrequency = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Частота видеопроцессора')]"); foreach (var linksGPU in gpuVideoFrequency) { Console.WriteLine(linksGPU.InnerText); } //Memory Frequency of GPUs var gpuMemoryFrequency = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Частота видеопамяти')]"); foreach (var linksGPU in gpuMemoryFrequency) { Console.WriteLine(linksGPU.InnerText); } //Video Memory type var gpuMemoryType = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Тип видеопамяти')]"); foreach (var linksGPU in gpuMemoryType) { Console.WriteLine(linksGPU.InnerText); } //Video Memory size var gpuMemorySize = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Объем видеопамяти')]"); foreach (var linksGPU in gpuMemorySize) { Console.WriteLine(linksGPU.InnerText); } //Video Memory type var gpuMemoryWidth = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Разрядность шины видеопамяти')]"); foreach (var linksGPU in gpuMemoryWidth) { Console.WriteLine(linksGPU.InnerText); } //Universal processor count var gpuProcessorCount = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Количество универсальных')]"); foreach (var linksGPU in gpuProcessorCount) { Console.WriteLine(linksGPU.InnerText); } //Connection type var gpuConnectionType = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Разъемы')]"); foreach (var linksGPU in gpuConnectionType) { Console.WriteLine(linksGPU.InnerText); } //Prices var productPrices = htmlDocLinks.DocumentNode.SelectNodes("//div[@title='Цена в интернет-магазине']"); foreach (var linksGPU in productPrices) { Console.WriteLine(linksGPU.InnerText + "\n"); } } //Getting all of that from next pages while (Loop == true) { var NextPageCheck = htmlDoc.DocumentNode.SelectNodes("//li[@class='bx-pag-next']/a").ToList(); if (NextPageCheck.Count != 0) { string link = url + NextPageCheck[0].Attributes["href"].Value; var urlDecode = HttpUtility.HtmlDecode(link); htmlDoc = htmlWeb.Load(urlDecode); htmlDoc = htmlWeb.Load(link); var nextPageNodeGPU = htmlDoc.DocumentNode.SelectNodes("//div[@class='bx-catalog-middle-part']//div[@class='bx_catalog_item_title']//a[@href]"); List <string> nextPageListGPU = new List <string>(); foreach (var ProductsHtmlSeparate in nextPageNodeGPU) { var ItemPage = ((url + ProductsHtmlSeparate.GetAttributeValue("href", null))); List <string> nextPageLinkGPU = ItemPage.Split(new char[] { ',' }).ToList(); //This is bad and I don't like how this is done but I haven't found any way to do this better yet. nextPageListGPU.AddRange(nextPageLinkGPU); } foreach (var itemLink in nextPageListGPU) { var htmlDocLinks = htmlWeb.Load(itemLink); //Model names of GPU var gpuModelName = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Модель')]"); foreach (var linksGPU in gpuModelName) { Console.WriteLine(linksGPU.InnerText); } //Frequency of GPUs var gpuVideoFrequency = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Частота видеопроцессора')]"); foreach (var linksGPU in gpuVideoFrequency) { Console.WriteLine(linksGPU.InnerText); } //Memory Frequency of GPUs var gpuMemoryFrequency = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Частота видеопамяти')]"); foreach (var linksGPU in gpuMemoryFrequency) { Console.WriteLine(linksGPU.InnerText); } //Video Memory type var gpuMemoryType = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Тип видеопамяти')]"); foreach (var linksGPU in gpuMemoryType) { Console.WriteLine(linksGPU.InnerText); } //Video Memory size var gpuMemorySize = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Объем видеопамяти')]"); foreach (var linksGPU in gpuMemorySize) { Console.WriteLine(linksGPU.InnerText); } //Video Memory type var gpuMemoryWidth = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Разрядность шины видеопамяти')]"); foreach (var linksGPU in gpuMemoryWidth) { Console.WriteLine(linksGPU.InnerText); } //Universal processor count var gpuProcessorCount = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Количество универсальных')]"); foreach (var linksGPU in gpuProcessorCount) { Console.WriteLine(linksGPU.InnerText); } //Connection type var gpuConnectionType = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Разъемы')]"); foreach (var linksGPU in gpuConnectionType) { Console.WriteLine(linksGPU.InnerText); } //Prices var productPrices = htmlDocLinks.DocumentNode.SelectNodes("//div[@title='Цена в интернет-магазине']"); foreach (var linksGPU in productPrices) { Console.WriteLine(linksGPU.InnerText + "\n"); } } } else { Loop = false; } } }
public static void shopkzCPU() { Console.OutputEncoding = Encoding.UTF8; bool Loop = true; var url = @"https://shop.kz"; var htmlWeb = new HtmlWeb(); var htmlDoc = htmlWeb.Load(url + "/protsessory/filter/almaty-is-v_nalichii-or-ojidaem-or-dostavim/apply/?PAGEN_1=1"); //Getting links of products var node = htmlDoc.DocumentNode.SelectNodes("//div[@class='bx-catalog-middle-part']//div[@class='bx_catalog_item_title']//a[@href]"); List <string> result1 = new List <string>(); foreach (var ProductsHtmlSeparate in node) { var ItemPage = ((url + ProductsHtmlSeparate.GetAttributeValue("href", null))); List <string> result = ItemPage.Split(new char[] { ',' }).ToList(); //This is bad and I don't like how this is done but I haven't found any way to do this better yet. result1.AddRange(result); } foreach (var itemLink in result1) { var htmlDocLinks = htmlWeb.Load(itemLink); //The type of the CPU var cpuType = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Тип процессора:')]"); foreach (var linksCPU in cpuType) { Console.WriteLine(linksCPU.InnerText); } //Number of sockets var cpuSocket = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Сокет')]"); foreach (var linksCPU in cpuSocket) { Console.WriteLine(linksCPU.InnerText); } //Number of cores var cpuCores = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Количество ядер')]"); foreach (var linksCPU in cpuCores) { Console.WriteLine(linksCPU.InnerText); } //CPU threads number var cpuThreads = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Количество потоков')]"); foreach (var linksCPU in cpuThreads) { Console.WriteLine(linksCPU.InnerText); } //CPU frequency var cpuFrequency = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Тактовая частота')]"); foreach (var linksCPU in cpuFrequency) { Console.WriteLine(linksCPU.InnerText); } //CPU microarchitecture var cpuArchitecture = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Микроархитектура')]"); foreach (var linksCPU in cpuArchitecture) { Console.WriteLine(linksCPU.InnerText); } //Cache size var cpuCache = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Объем кэша')]"); foreach (var linksCPU in cpuCache) { Console.WriteLine(linksCPU.InnerText); } //Integrated graph system var cpuIGS = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Интегрированная графическая система')]"); foreach (var linksCPU in cpuIGS) { Console.WriteLine(linksCPU.InnerText); } //Techprocess var cpuTechprocess = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Техпроцесс')]"); foreach (var linksCPU in cpuTechprocess) { Console.WriteLine(linksCPU.InnerText); } //Estimated power var cpuPower = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Расчетная мощность')]"); foreach (var linksCPU in cpuPower) { Console.WriteLine(linksCPU.InnerText); } //Prices var productPrices = htmlDocLinks.DocumentNode.SelectNodes("//div[@title='Цена в интернет-магазине']"); foreach (var linksCPU in productPrices) { Console.WriteLine(linksCPU.InnerText + "\n"); } } //Getting all of that from next pages while (Loop == true) { var NextPageCheck = htmlDoc.DocumentNode.SelectNodes("//li[@class='bx-pag-next']/a").ToList(); if (NextPageCheck.Count != 0) { string link = url + NextPageCheck[0].Attributes["href"].Value; var urlDecode = HttpUtility.HtmlDecode(link); htmlDoc = htmlWeb.Load(urlDecode); htmlDoc = htmlWeb.Load(link); var nextPageNodeCPU = htmlDoc.DocumentNode.SelectNodes("//div[@class='bx-catalog-middle-part']//div[@class='bx_catalog_item_title']//a[@href]"); List <string> nextPageListCPU = new List <string>(); foreach (var ProductsHtmlSeparate in nextPageNodeCPU) { var ItemPage = ((url + ProductsHtmlSeparate.GetAttributeValue("href", null))); List <string> nextPageCPU = ItemPage.Split(new char[] { ',' }).ToList(); //This is bad and I don't like how this is done but I haven't found any way to do this better yet. nextPageListCPU.AddRange(nextPageCPU); } foreach (var itemLink in nextPageListCPU) { var htmlDocLinks = htmlWeb.Load(itemLink); //The type of the CPU var cpuType = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Тип процессора:')]"); foreach (var linksCPU in cpuType) { Console.WriteLine(linksCPU.InnerText); } //Number of sockets var cpuSocket = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Сокет')]"); foreach (var linksCPU in cpuSocket) { Console.WriteLine(linksCPU.InnerText); } //Number of cores var cpuCores = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Количество ядер')]"); foreach (var linksCPU in cpuCores) { Console.WriteLine(linksCPU.InnerText); } //CPU threads number var cpuThreads = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Количество потоков')]"); foreach (var linksCPU in cpuThreads) { Console.WriteLine(linksCPU.InnerText); } //CPU frequency var cpuFrequency = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Тактовая частота')]"); foreach (var linksCPU in cpuFrequency) { Console.WriteLine(linksCPU.InnerText); } //CPU microarchitecture var cpuArchitecture = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Микроархитектура')]"); foreach (var linksCPU in cpuArchitecture) { Console.WriteLine(linksCPU.InnerText); } //Cache size var cpuCache = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Объем кэша')]"); foreach (var linksCPU in cpuCache) { Console.WriteLine(linksCPU.InnerText); } //Integrated graph system var cpuIGS = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Интегрированная графическая система')]"); foreach (var linksCPU in cpuIGS) { Console.WriteLine(linksCPU.InnerText); } //Techprocess var cpuTechprocess = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Техпроцесс')]"); foreach (var linksCPU in cpuTechprocess) { Console.WriteLine(linksCPU.InnerText); } //Estimated power var cpuPower = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Расчетная мощность')]"); foreach (var linksCPU in cpuPower) { Console.WriteLine(linksCPU.InnerText); } //Prices var productPrices = htmlDocLinks.DocumentNode.SelectNodes("//div[@title='Цена в интернет-магазине']"); foreach (var linksCPU in productPrices) { Console.WriteLine(linksCPU.InnerText + "\n"); } } } else { Loop = false; } } }
public static void shopkzMotherboard() { Console.OutputEncoding = Encoding.UTF8; bool Loop = true; var url = @"https://shop.kz"; var htmlWeb = new HtmlWeb(); var htmlDoc = htmlWeb.Load(url + "/materinskie-platy/filter/almaty-is-v_nalichii-or-ojidaem-or-dostavim/apply/?PAGEN_1=1"); //Getting links of products var node = htmlDoc.DocumentNode.SelectNodes("//div[@class='bx-catalog-middle-part']//div[@class='bx_catalog_item_title']//a[@href]"); List <string> result1 = new List <string>(); foreach (var ProductsHtmlSeparate in node) { var ItemPage = ((url + ProductsHtmlSeparate.GetAttributeValue("href", null))); List <string> result = ItemPage.Split(new char[] { ',' }).ToList(); //This is bad and I don't like how this is done but I haven't found any way to do this better yet. result1.AddRange(result); } foreach (var itemLink in result1) { var htmlDocLinks = htmlWeb.Load(itemLink); //Socket var mothboardSocket = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Сокет:')]"); foreach (var linksMB in mothboardSocket) { Console.WriteLine(linksMB.InnerText); } //Chipset var mothboardChipset = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Чипсет')]"); foreach (var linksMB in mothboardChipset) { Console.WriteLine(linksMB.InnerText); } //Form factor var mothboardFactor = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Форм-фактор')]"); foreach (var linksMB in mothboardFactor) { Console.WriteLine(linksMB.InnerText); } //Memory slots number var mothboardMemorySlots = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Количество слотов памяти')]"); foreach (var linksMB in mothboardMemorySlots) { Console.WriteLine(linksMB.InnerText); } //SATA numbers var mothboardSATA = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Количество разъемов')]"); foreach (var linksMB in mothboardSATA) { Console.WriteLine(linksMB.InnerText); } //PCI numbers var mothboardPCI = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Количество слотов PCI')]"); foreach (var linksMB in mothboardPCI) { Console.WriteLine(linksMB.InnerText); } //Pins var mothboardPins = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Коннекторы питания')]"); foreach (var linksMB in mothboardPins) { Console.WriteLine(linksMB.InnerText); } //Prices var productPrices = htmlDocLinks.DocumentNode.SelectNodes("//div[@title='Цена в интернет-магазине']"); foreach (var linksMB in productPrices) { Console.WriteLine(linksMB.InnerText + "\n"); } } //Getting all of that from next pages while (Loop == true) { var NextPageCheck = htmlDoc.DocumentNode.SelectNodes("//li[@class='bx-pag-next']/a").ToList(); if (NextPageCheck.Count != 0) { string link = url + NextPageCheck[0].Attributes["href"].Value; var urlDecode = HttpUtility.HtmlDecode(link); htmlDoc = htmlWeb.Load(urlDecode); htmlDoc = htmlWeb.Load(link); var nextPageNodeMB = htmlDoc.DocumentNode.SelectNodes("//div[@class='bx-catalog-middle-part']//div[@class='bx_catalog_item_title']//a[@href]"); List <string> nextPageListMBU = new List <string>(); foreach (var ProductsHtmlSeparate in nextPageNodeMB) { var ItemPage = ((url + ProductsHtmlSeparate.GetAttributeValue("href", null))); List <string> nextPageMB = ItemPage.Split(new char[] { ',' }).ToList(); //This is bad and I don't like how this is done but I haven't found any way to do this better yet. nextPageListMBU.AddRange(nextPageMB); } foreach (var itemLink in nextPageListMBU) { var htmlDocLinks = htmlWeb.Load(itemLink); //Socket var mothboardSocket = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Сокет:')]"); foreach (var linksMB in mothboardSocket) { Console.WriteLine(linksMB.InnerText); } //Chipset var mothboardChipset = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Чипсет')]"); foreach (var linksMB in mothboardChipset) { Console.WriteLine(linksMB.InnerText); } //Form factor var mothboardFactor = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Форм-фактор')]"); foreach (var linksMB in mothboardFactor) { Console.WriteLine(linksMB.InnerText); } //Memory slots number var mothboardMemorySlots = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Количество слотов памяти')]"); foreach (var linksMB in mothboardMemorySlots) { Console.WriteLine(linksMB.InnerText); } //SATA numbers var mothboardSATA = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Количество разъемов')]"); foreach (var linksMB in mothboardSATA) { Console.WriteLine(linksMB.InnerText); } //PCI numbers var mothboardPCI = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Количество слотов PCI')]"); foreach (var linksMB in mothboardPCI) { Console.WriteLine(linksMB.InnerText); } //Pins var mothboardPins = htmlDocLinks.DocumentNode.SelectNodes("//ul[@class='bx-short-desc']/li[contains(text(), 'Коннекторы питания')]"); foreach (var linksMB in mothboardPins) { Console.WriteLine(linksMB.InnerText); } //Prices var productPrices = htmlDocLinks.DocumentNode.SelectNodes("//div[@title='Цена в интернет-магазине']"); foreach (var linksMB in productPrices) { Console.WriteLine(linksMB.InnerText + "\n"); } } } else { Loop = false; } } }