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Пожалуйста, проверьте правильность ввода ресурса!"); } }