Exemplo n.º 1
0
        void ParseFromPage(GasStation station, String html)
        {
            var htmlDoc = new HtmlDocument();
            htmlDoc.LoadHtml(html);

            var h2 = htmlDoc.DocumentNode.SelectSingleNode(".//h2");

            if (h2 == null)
                return;

            station.Name = h2.InnerText.Replace("Информация об", "").Trim();
            var div = htmlDoc.DocumentNode.SelectSingleNode(".//div[@style='max-width: 550px;']");
            foreach (var tr in div.SelectNodes(".//tr"))
            {
                var nameTr = tr.FirstChild.InnerText.Trim();
                var valueTr = tr.LastChild;

                if ( nameTr.Contains("Компания/бренд") ) 
                    station.Brand = valueTr.SelectSingleNode(".//a").InnerText;
                else if (nameTr.Contains("Адрес"))
                    station.Address = valueTr.InnerText;
                else if (nameTr.Contains("Топливо"))
                { 
                    int flag = 0;
                    var fuel = valueTr.InnerText;
                    if (fuel.Contains("пропан"))
                        flag += 1;
                    if (fuel.Contains("метан"))
                        flag += 2;

                    if (flag == 1)
                        station.FuelType = "Пропан/бутан";
                    else if (flag == 2)
                        station.FuelType = "Метан";
                    else if (flag == 3)
                        station.FuelType = "Пропан/бутан и метан";
                    break;
                }
                else if (nameTr.Contains("Доп. услуги"))
                    station.Service = valueTr.InnerText;
            }
        }
Exemplo n.º 2
0
        List<GasStation> GetStations(List<String> stationUrls)
        {
            var stations = new ConcurrentQueue<GasStation>();
            var tasks = new List<Task>();
            try
            {
                var i = 0;
                foreach (var url in stationUrls.Take(3))
                {
                    tasks.Add(Task.Run(() =>
                    {
                        var html = Get(url);
                        var station = new GasStation(){ Url = url };
                        ParseFromPage(station, html);
                        stations.Enqueue(station);

                        Logger.Instance.Info(String.Format("{0}/{1} загружена информация о заправке {2}", ++i, stationUrls.Count, url));
                    }));
                }

                Task.WaitAll(tasks.ToArray());
            }
            catch (NoAvaliableProxiesException)
            {
                Logger.Instance.Error("Закончились свободные прокси, добывание url станций прекращено");
            }
            catch (Exception ex)
            {
                Logger.Instance.Error("Неизвестная ошибка, добывание станций прекращено " + ex.ToString());
            }

            return stations.ToList();
        }