Как индексировать разделы или навигацию на веб-сайте с помощью Web Crawler, написанного на C # - PullRequest
0 голосов
/ 30 марта 2019

Я пытаюсь создать веб-сканер, который должен извлекать все категории, подкатегории и продукты с веб-сайта. Существует пример кода, но я совершенно не понимаю, что с ним не так, поскольку робот не печатает никаких данных.

Не могли бы вы хотя бы указать, что не так в коде ??

Заранее спасибо за любую помощь :)

using System;
using System.Collections.Generic;
using System.Linq;
using HtmlAgilityPack;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

namespace WebCrawler
{
    class Program
    {
        static void Main(string[] args)
        {
            startCrawlerAsync();
            Console.ReadLine();
        }

        private static async Task startCrawlerAsync() {

            var url = "https://www.rockwool.pl/produkty/";
            var httpClient = new HttpClient();
            var html = await httpClient.GetStringAsync(url);
            var htmlDocument = new HtmlDocument();
            htmlDocument.LoadHtml(html);

            // a list to add all the list of ROCKWOOL category products with all products
            var productCategories = new List<ProductCategory>();
            List<HtmlNode> productSections =
            //htmlDocument.DocumentNode.Descendants("section")
            // .Where(node => node.Equals("class").Equals("O90-product-list")).ToList();

            htmlDocument.DocumentNode.Descendants("nav")
             .Where(node => node.GetAttributeValue("class", "").Equals("O90-1-product-sublist__box")).ToList();

            foreach (HtmlNode section in productSections)
            {
                List<HtmlNode> products = section.Descendants("li").ToList();
                foreach(HtmlNode product in products)
                {
                    string productName = product.InnerText;
                }
                // var catName = section.Descendants("h3").Single().GetAttributeValue()

                ProductCategory productCategory = new ProductCategory
                {

                    MainCategory = section.Descendants("h3").Single().InnerText,
                    SubCategory = section.Descendants("h3").Single().InnerText, 
                    ProductName = section.Descendants("li").Single().InnerText, 
                    ProductUrl = section.Descendants("a").FirstOrDefault().ChildAttributes("href").FirstOrDefault().Value
                };

                productCategories.Add(productCategory);
            }
        }
    }
}

Я хочу извлечь каждую категорию продуктов с подкатегориями и продуктами с веб-сайта https://www.rockwool.pl/produkty/.

Например:

Ściany zewnętrzne -> Основная категория

Метод лекко мокра -> подкатегория

FRONTROCK 35 -> продукт

FASROCK LL -> товар

FRONTROCK MAX E -> product

Fasady Goylowane -> подкатегория

VENTI MAX -> товар

VENTI MAX F -> продукт

WENTIROCK -> товар

WENTIROCK F -> product

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...