using System.Collections.Generic;
public string Type { get; set; }
public Dictionary<string, string> Mark { get; set; }
public Dictionary<string, string> Model { get; set; }
public Dictionary<string, string> CarBody { get; set; }
public static List<string> typesTV = new List<string>();
public static List<TVehicle> passengerCars = new List<TVehicle>();
public static List<TVehicle> commercialVehiclesTrucksBuses = new List<TVehicle>();
public static List<TVehicle> motoAtvScuters = new List<TVehicle>();
Mark = new Dictionary<string, string>();
Model = new Dictionary<string, string>();
CarBody = new Dictionary<string, string>();
public class MainContent {
private static string mainPageURL = "http://www.elcats.ru/";
private static string[] selectedNodes = {"//ul[@class='models']",
private static string GetResponseFrom(string pageURL) {
WebClient wbClient = new WebClient();
Stream mainResponse = wbClient.OpenRead(pageURL);
StreamReader mainReader = new StreamReader(mainResponse);
string mainResponseFromServer = mainReader.ReadToEnd();
return mainResponseFromServer;
private static string GetFullLinkToNextPage(string pieceLink) {
if (pieceLink.IndexOf(ch) == 0) {
fullLink = String.Concat(mainPageURL, pieceLink.Substring(1));
private static void GetHeadersAndMarkFrom(string response) {
var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(response);
foreach (string selectNode in selectedNodes)
foreach (HtmlAgilityPack.HtmlNode node in htmlDoc.DocumentNode.SelectNodes(selectNode))
TVehicle TVehicle = new TVehicle();
if (selectNode == selectedNodes[2] && node.Attributes["href"].Value.Contains("/truck/")) {
TVehicle.Mark.Add(node.InnerText, GetFullLinkToNextPage(node.Attributes["href"].Value));
TVehicle.Type = TVehicle.typesTV[1];
TVehicle.commercialVehiclesTrucksBuses.Add(TVehicle);
else if (selectNode == selectedNodes[2] && node.Attributes["href"].Value.Contains("/moto/")) {
TVehicle.Mark.Add(node.InnerText, GetFullLinkToNextPage(node.Attributes["href"].Value));
TVehicle.Type = TVehicle.typesTV[2];
TVehicle.motoAtvScuters.Add(TVehicle);
else if (selectNode == selectedNodes[1]) {
TVehicle.typesTV.Add(node.InnerText);
else if (selectNode == selectedNodes[2]){
TVehicle.Mark.Add(node.InnerText, GetFullLinkToNextPage(node.Attributes["href"].Value));
TVehicle.Type = TVehicle.typesTV[0];
TVehicle.passengerCars.Add(TVehicle);
public static void OutputToConsoleDataFromMainPage() {
if ((TVehicle.typesTV.Count != 0) && (TVehicle.motoAtvScuters.Count != 0) &&
(TVehicle.commercialVehiclesTrucksBuses.Count != 0) && (TVehicle.passengerCars.Count != 0)) {
Console.WriteLine("{0}:", TVehicle.typesTV[2]);
foreach (TVehicle selectNode in TVehicle.motoAtvScuters)
foreach (KeyValuePair<string,string> inNode in selectNode.Mark) {
Console.WriteLine(inNode.Key + ", Link: " + inNode.Value);
Console.WriteLine("\n{0}:", TVehicle.typesTV[1]);
foreach (TVehicle selectNode in TVehicle.commercialVehiclesTrucksBuses)
foreach (KeyValuePair<string,string> inNode in selectNode.Mark) {
Console.WriteLine(inNode.Key + ", Link: " + inNode.Value);
Console.WriteLine("\n{0}:", TVehicle.typesTV[0]);
foreach (TVehicle selectNode in TVehicle.passengerCars)
foreach (KeyValuePair<string,string> inNode in selectNode.Mark) {
Console.WriteLine(inNode.Key + ", Link: " + inNode.Value);
Console.WriteLine("Ошибка!\nВозможно используемые списки пусты.");
public static void GetAndWriteDataFromMainPage() {
string response = MainContent.GetResponseFrom(mainPageURL);
MainContent.GetHeadersAndMarkFrom(response);
public static void Main()
MainContent.GetAndWriteDataFromMainPage();
MainContent.OutputToConsoleDataFromMainPage();