Exemple #1
0
        private void Update()
        {
            _html = "";

            _lastStoredHrefBCPEA = ReadLastCarHref(_filenameBCPEA);
            _lastStoredHrefNap   = ReadLastCarHref(_filenameNap);


            try
            {
                var docNap      = new HtmlWeb().Load(_urlNap).DocumentNode;
                var nDivs       = docNap.SelectNodes("//div[@class]");
                var carsNapDivs = nDivs.Where(at => at.GetAttributeValue("class", "").Trim() == "aoh-item").ToList();
                carsNapDivs.ForEach(div => div.InnerHtml = div.InnerHtml.Replace("href=\"/targ/", "href=\"" + _websiteNapLink + "/targ/")
                                                           .Replace("src=\"/", "src=\"" + _websiteNapLink + "/"));
                var lastestCarsNap = GetLastestCars(carsNapDivs, _lastStoredHrefNap);
                UpdateLastStoredHref(lastestCarsNap, _filenameNap, ref _lastStoredHrefNap);

                if (lastestCarsNap.Any())
                {
                    string title = "Original link: <a href=\"" + _urlNap + "\">" + _urlNap + "</a><hr>";
                    _html += title + string.Join("<hr>", lastestCarsNap.Select(s => s.InnerHtml)) + "<br/>";
                    Logger.Write("lastestCarsNap: " + lastestCarsNap.Count);
                }

                var doc        = new HtmlWeb().Load(_urlBcpea).DocumentNode;
                var nodeBody   = doc.SelectSingleNode("//body");
                var n          = nodeBody.SelectNodes("//ul[@class]");
                var carsCsiLis = n.First(at => at.Attributes.AttributesWithName("class").Select(a => a.Value == "results_list").First()).SelectNodes("li").ToList();
                carsCsiLis.ForEach(li => li.InnerHtml = li.InnerHtml.Replace("href=\"/bg/auto/", "href=\"" + _websiteBCPEALink + "/bg/auto/"));
                var lastestCars = GetLastestCars(carsCsiLis, _lastStoredHrefBCPEA);
                UpdateLastStoredHref(lastestCars, _filenameBCPEA, ref _lastStoredHrefBCPEA);

                if (lastestCars.Any())
                {
                    string title = "Original link: <a href=\"" + _urlBcpea + "\">" + _urlBcpea + "</a><hr>";
                    _html += title + string.Join("<hr>", lastestCars.Select(s => s.InnerHtml));
                    Logger.Write("lastestCars: " + lastestCars.Count);
                }
            }
            catch (Exception ex)
            {
                Logger.Write("Error in Update(): ", ex);
            }
        }
        public void ParseFrom(string url, int StartPage, int FinishPage)
        {
            try
            {
                var doc = new HtmlWeb().Load(url + "/goods.php");
                // int pageCount = MarketItems.PageCount(url);
                //проверка по пагинации
                for (int page = StartPage; page <= FinishPage; page++)
                {
                    doc = new HtmlWeb().Load(url + "/goods.php?cid=5&page=" + page); //текущая страница
                    var pageGoods = doc.DocumentNode.SelectNodes("//div[@class='ernr']/ul/li/div/h3/a").
                                    Select(a => url + "/" + a.ChildAttributes("href").
                                           FirstOrDefault().Value);           //ссылки на все товары на странице
                    if (pageGoods.Count() == 0)
                    {
                        throw new Exception("Товары не найдены!\nВозможно, сайт поменял верстку. Требуется обновить ПО!");
                    }
                    else
                    {
                        foreach (var good in pageGoods.ToList())
                        {
                            MarketItem item = new MarketItem();//будем заполнять товар
                            try
                            {
                                var goodNode   = new HtmlWeb().Load(good).DocumentNode.SelectSingleNode("//div[@class='cps']");                                         //html товара. отсюда и вытащим всё
                                var Options    = MarketItems.ConvertList(goodNode.SelectNodes(".//div[@class='tabmen']/ul/li").Select(a => a.InnerText).ToList());
                                var Quantities = ConvertList(goodNode.SelectNodes(".//div[@id='tabconten']/ul/li").Select(a => a.InnerText.Replace("双", "")).ToList()); //

                                item.Model = Count != 0 ? this.Max(a => a.Model) + 1 : 1;

                                item.Name             = goodNode.SelectSingleNode(".//h6").InnerText + " " + item.Model;
                                item.Description      = "<p><br></p>";
                                item.SEO_url          = item.Name.Replace(" ", "-");
                                item.Out_stock_status = "";
                                item.Option_type      = "radio";
                                item.Price            = "";//сам вводит
                                item.Main_image       = url + "/" + goodNode.SelectSingleNode(".//img").ChildAttributes("src").FirstOrDefault().Value;
                                /*TODO*/
                                item.Manufacturer = Manuf(item.Name);
                                item.Option       = MarketItems.Option(Options);
                                string resName = "";
                                if (item.Manufacturer.Contains("Timber"))
                                {
                                    resName += "Ботинки";
                                }
                                else
                                {
                                    resName += "Кроссовки";
                                }
                                if (Options.Min() <= 36)
                                {
                                    resName += " Женские ";
                                }
                                else
                                {
                                    resName += " Мужские ";
                                }
                                item.Name       = resName + goodNode.SelectSingleNode(".//h6").InnerText + " " + item.Model;
                                item.Meta_title = item.Name;
                                //по парам
                                item.Quantity     = Quantities.First().ToString();
                                item.Option_value = Options.First().ToString();
                                if (Options.Count == Quantities.Count)
                                {
                                    if (Options.Count > 1)
                                    {
                                        for (int i = 1; i < Options.Count; i++)
                                        {
                                            MarketItem child = new MarketItem();
                                            child.Model        = item.Model;
                                            child.Name         = item.Name;
                                            child.Description  = "";
                                            child.Meta_title   = "";
                                            child.SEO_url      = "";
                                            child.Option       = item.Option;
                                            child.Option_type  = item.Option_type;
                                            child.Main_image   = "";
                                            child.Quantity     = Quantities[i].ToString();
                                            child.Option_value = Options[i].ToString();
                                            item.ChildrenItems.Add(child);
                                        }
                                    }
                                }
                                else
                                {
                                    throw new Exception();
                                }
                            }
                            catch (Exception exception)
                            {
                                item.Error = exception.Message.ToString();
                            }
                            Add(item);//после парсинга страницы добавляем элемент
                        }
                    }
                }
            }
            catch (Exception e)
            {
                throw new Exception("Произошла ошибка при попытке получить страницу по адресу: " + url + "\n\t\t" + e.Message + "\nПожалуйста, проверьте правильность ввода ресурса!");
            }
        }