Как очистить несколько селекторов и сгруппировать их - PullRequest
0 голосов
/ 19 ноября 2018

Я хочу почистить эту страницу: https://www.g2crowd.com/products/google-analytics/reviews (Для моего собственного образования)

    // @nuget: HtmlAgilityPack
using System;
using HtmlAgilityPack;

public class Program
{
    public static void Main()
    {
        HtmlWeb web = new HtmlWeb();
        HtmlDocument html = web.Load("https://www.g2crowd.com/products/google-analytics/reviews");
        var textNodes = html.DocumentNode.SelectNodes("//h3[contains(@class,'review-list-heading')]");
        if (textNodes != null)
            foreach (var t in textNodes)
                Console.WriteLine(t.InnerText);
    }
}

Это то, что я имею до сих пор, что отлично тянет каждый отзыв. Но как в этом случае я бы отказался от заголовка и тела обзора - давая понять, что каждый обзор является отдельным?

Отзыв "тело" (имеется в виду текст): //*[@id="pjax-container"]/div[2]/div[2]/div[6]/div[3]/div/div/div[2]/div[2]/div/div в xpath.

Или <div itemprop="reviewBody"> в чистом html.

Это dotnetfiddle того, что у меня сейчас есть: https://dotnetfiddle.net/30Y0M6

Пожалуйста, спросите, не достаточно ли я ясен.

1 Ответ

0 голосов
/ 19 ноября 2018

выберите родительский контейнер <div class="mb-2 border-bottom">, затем выберите дочерний

// @nuget: HtmlAgilityPack
using System;
using HtmlAgilityPack;

public class Program
{
    public static void Main()
    {
        HtmlWeb web = new HtmlWeb();
        HtmlDocument html = web.Load("https://www.g2crowd.com/products/google-analytics/reviews");
        var divNodes = html.DocumentNode.SelectNodes("//div[@class='mb-2 border-bottom']");
        if (divNodes != null)
        {
            foreach (var child in divNodes)
            {
                var allowedTags = child.SelectNodes(".//h3 | .//h5 | .//p");
                foreach (var tag in allowedTags)
                    Console.WriteLine(tag.InnerText);
                Console.WriteLine("======================================");
            }
        }
    }
}
...