처음 만
    • c# html-agility-pack

      문제

      여기에 문제가있다. 웹 사이트와 서브 페이지가 거의 없습니다.

      서브 페이지 : DAMSKIE, MÄSKIE, DZIECIÄCE, 스포츠, AKCESORIA, 프리미엄, TOREBKI, WYPRZEDAÅ»,

      그것들 각각에는 "PóÅbbuty", "Klapki"등과 같은 엘레멘트를 분류하는 것이 거의 없습니다.

      Subpages를 얻을 수 있지만 요소 분류 목록을 가져올 수 없습니다 (P³Åbuty, Klapki 등). 리스트가 "PÅÅbbuty", "Klapki", "Obcasy"와 같은 경우 내 코드는 "PÅÅbbuty"만 가져 오지만 "Klapki"또는 "Obcasy"는 얻지 못합니다.

      [서브 페이지의 이미지 + 얻으려고하는 요소 목록] [1]

      using HtmlAgilityPack;
      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Net.Http;
      using System.Text;
      using System.Threading.Tasks;
      
      namespace Crawler_Shoes
      {
          public class Crawl
          {
              private static string navBar = "megamenu__item";
              private const string shoesTypes = "sidebar-section__wrapper sidebar-section__wrapper--categories";
              private static string mainSite = "https://www.eobuwie.com.pl/";
              public static List<string> categoriesNames = new List<string>();
              public static List<string> linksNames = new List<string>();
              public static List<string> categoriesOfCategoriesNames = new List<string>();
              private readonly List<Shoes> shoes = new List<Shoes>();
      
              public static async Task<IEnumerable<HtmlNode>> HttpClient(string site, string descendant, string equals)
              {
                  var httpClient = new HttpClient();
                  var html = await httpClient.GetStringAsync(site);
                  var htmlDocument = new HtmlDocument();
                  htmlDocument.LoadHtml(html);
                  return htmlDocument.DocumentNode.Descendants(descendant)
                      .Where(node => node.GetAttributeValue("class", "").Equals(equals)).ToList();
              }
              public static async Task GetCategories()
              {
                  var menu = await HttpClient(mainSite, "li", navBar);                      
                  foreach (var nav in menu)
                  {
                      //links.Add(nav.Descendants("a").FirstOrDefault().ChildAttributes("href").FirstOrDefault().Value);
                      categoriesNames.Add(nav.Descendants("a").FirstOrDefault().InnerText); //gets names of categories
                      linksNames.Add(nav.Descendants("a").FirstOrDefault().ChildAttributes("href").FirstOrDefault().Value); //gets links for categories
                      if(categoriesNames.Last() == "\n\t\t\tWyprzedaż\t\t")
                      {
                          categoriesNames.Remove(categoriesNames.Last());
                          linksNames.Remove(categoriesNames.Last());
                      }
                  }
                  Crawl.GetCategoriesofCategories();
              }
              public static async Task GetCategoriesofCategories()
              {
                      for (var i = 0; i <= categoriesNames.Count-1; i++)
                      {
                          var categories = await HttpClient(linksNames.ElementAt(i), "ul", shoesTypes);
                          categoriesOfCategoriesNames.Add(categoriesNames.ElementAt(i));
                          foreach(var li in categories)
                          {
                              categoriesOfCategoriesNames.Add(li.Descendants("a").FirstOrDefault().ChildAttributes("href").FirstOrDefault().Value);
                          }
                      }
      
              }
          }
      }
      

      문제가있는 부분 :

          public static async Task GetCategoriesofCategories()
                  {
                          for (var i = 0; i <= categoriesNames.Count-1; i++)
                          {
                              var categories = await HttpClient(linksNames.ElementAt(i), "ul", shoes
      
      Types);
                          categoriesOfCategoriesNames.Add(categoriesNames.ElementAt(i));
                          foreach(var li in categories)
                          {
                              categoriesOfCategoriesNames.Add(li.Descendants("a").FirstOrDefault().ChildAttributes("href").FirstOrDefault().Value);
                          }
                      }
      
              }
      

      인기 답변

      나는 이것에 성공했다 :

      string url = "https://www.eobuwie.com.pl/damskie.html";
      HtmlWeb web = new HtmlWeb();
      HtmlDocument doc = web.Load(url);
      var sidebar = doc.DocumentNode.SelectSingleNode("//ul[@class='sidebar-section__wrapper sidebar-section__wrapper--categories']");
      var categories = sidebar.SelectNodes("li");
      foreach (var category in categories)
      {
          var anchor = category.SelectSingleNode("a");
          string shoeCategory = anchor.InnerText.Trim();
          Console.WriteLine(shoeCategory);
      }
      

      당신이하는 일과는 조금 다르긴하지만, 적어도 이것에 대한 힌트를 가지고 당신 자신의 코드에 적용 할 수 있기를 바랍니다.

      링크가 필요한 경우 다음을 추가하십시오.

      string shoeCategoryLink = anchor.GetAttributeValue("href", string.Empty);
      


      Related

      아래 라이선스: CC-BY-SA with attribution
      와 제휴하지 않음 Stack Overflow
      이 KB는 합법적입니까? 예, 이유를 알아보십시오.
      아래 라이선스: CC-BY-SA with attribution
      와 제휴하지 않음 Stack Overflow
      이 KB는 합법적입니까? 예, 이유를 알아보십시오.