Можно ли получить DOM элементы отфильтрованные по потомку

ZbidZ

Client
Регистрация
26.12.2015
Сообщения
289
Благодарностей
5
Баллы
18
Доброго времени суток уважаемые товарищи форумчане! Затрудняюсь с реализацией одного момента. Есть некий шаблон:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div class="post">
<div class="post_description">
<div class="post_author">
<a class="post_date" href="/">12 сентября 2018 в 12:00</a>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Recusandae earum, quasi cum rerum ea praesentium.
</div>
</div>
</div>

<div class="post">
<div class="post_description">
<div class="post_author">
<a class="post_date" href="/">12 сентября 2018 в 15:00</a>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Recusandae earum, quasi cum rerum ea praesentium.
</div>
</div>
</div>

<div class="post">
<div class="post_description">
<div class="post_author">
<a class="post_date" href="/">12 сентября 2018 в 17:00</a>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Recusandae earum, quasi cum rerum ea praesentium.
</div>
</div>
</div>

<div class="post">
<div class="post_description">
<div class="post_author">
<a class="post_date" href="/">13 сентября 2018 в 11:00</a>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Recusandae earum, quasi cum rerum ea praesentium.
</div>
</div>
</div>

<div class="post">
<div class="post_description">
<div class="post_author">
<a class="post_date" href="/">13 сентября 2018 в 13:00</a>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Recusandae earum, quasi cum rerum ea praesentium.
</div>
</div>
</div>

</body>
</html>

Как мне получить все элементы класса post_date. Далее мне нужно отфильтровать по дате, например по строке innerText 12 сентября 2018 (Без в 12:00) без времени, только по дате. и на выходе получить в переменную объект или массив или в строках, коллекцию элементов с элементами класса post, но отфильтрованных по потомкам, то есть по ссылкам класса post_date.
чтоб я в итоге получил 2 элемента с определенной датой вот в таком виде

<div class="post">
<div class="post_description">
<div class="post_author">
<a class="post_date" href="/">12 сентября 2018 в 12:00</a>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Recusandae earum, quasi cum rerum ea praesentium.
</div>
</div>
</div>

<div class="post">
<div class="post_description">
<div class="post_author">
<a class="post_date" href="/">12 сентября 2018 в 15:00</a>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Recusandae earum, quasi cum rerum ea praesentium.
</div>
</div>
</div>

Буду очень благодарен за разъяснение если так сделать возможно в ZP
 

SergSh

Client
Регистрация
10.05.2017
Сообщения
541
Благодарностей
395
Баллы
63
как дату собираешся фильтровать? что с месяцами делать? что важно?
 

ZbidZ

Client
Регистрация
26.12.2015
Сообщения
289
Благодарностей
5
Баллы
18
как дату собираешся фильтровать? что с месяцами делать? что важно?
В переменной будет только 12 сентября 2018, по этой строке нужно будет отфильтровать элемент ссылки в которой текст в формате 12 сентября 2018 в 15:00. Думаю через регулярку (в 15:00) отсечь, оставаться будет 12 сентября 2018, провести сравнение, если строка переменной совпадает с отсеченной строкой inerText элемента post_date, то элемент post c подходящим под условие сравнения даты, поместить в переменную.
 

ZbidZ

Client
Регистрация
26.12.2015
Сообщения
289
Благодарностей
5
Баллы
18
как дату собираешся фильтровать? что с месяцами делать? что важно?
важно получить элемент post и записать его в переменную или в текстовый файл, со всеми вложеностями, но фильтрация элементов проходит по потомку класса post_date
 

SergSh

Client
Регистрация
10.05.2017
Сообщения
541
Благодарностей
395
Баллы
63

ZbidZ

Client
Регистрация
26.12.2015
Сообщения
289
Благодарностей
5
Баллы
18

SergSh

Client
Регистрация
10.05.2017
Сообщения
541
Благодарностей
395
Баллы
63

ZbidZ

Client
Регистрация
26.12.2015
Сообщения
289
Благодарностей
5
Баллы
18
HtmlAgilityPack нужно будет установить
Мне кажется это будет излишком для простого шаблона. Как то через javaScript можно отфильтровать и получить коллекцию....вот только не соображу как....знаю есть разные методы в javaScript именно связанные с DOM деревом элементов и их взаимодействием....там и фильтрация есть, но вот только не силен я в JS....Или вы имеете ввиду что эта библиотека как раз и будет работать для JS???
 

SergSh

Client
Регистрация
10.05.2017
Сообщения
541
Благодарностей
395
Баллы
63
Это под либу HtmlAgilityPack. Остается ее засунуть в папку зеннопостера ExternalAssemblies и подключить в GAS и using
Код:
var lst = project.Lists["list"];//Список для результата
string dtc = project.Variables["data"].Value;//Дата для сравнения в формате - 12 сентября 2018
string dom = project.Variables["dom"].Value;//Страница для парсинга

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();                        
doc.LoadHtml(dom);

var posts = doc.DocumentNode.SelectNodes(@"//div[@class = 'post']");//Сюда получаем все посты 

foreach(var p in posts)//Тут перебираем посты
{
    string date = p.SelectSingleNode(@".//a").InnerText;//Тут с каждого поста берем текст из тега "<а>"
    string dt = System.Text.RegularExpressions.Regex.Match(date, @".*?(?=\sв)").Value;//Берем дату без времени
    if(dt.Contains(dtc)) lst.Add(p.OuterHtml);//Если звезды сошлись, кладем в список

}
 
Последнее редактирование:
  • Спасибо
Реакции: Mihalich

ZbidZ

Client
Регистрация
26.12.2015
Сообщения
289
Благодарностей
5
Баллы
18
Это под либу HtmlAgilityPack. Остается ее засунуть в папку зеннопостера ExternalAssemblies и подключить в GAS и using
Спасибо SergSh....попробую данным методом реализовать....отпишусь попозже
 

ZbidZ

Client
Регистрация
26.12.2015
Сообщения
289
Благодарностей
5
Баллы
18
Это под либу HtmlAgilityPack. Остается ее засунуть в папку зеннопостера ExternalAssemblies и подключить в GAS и using
Код:
var lst = project.Lists["list"];//Список для результата
string dtc = project.Variables["data"].Value;//Дата для сравнения в формате - 12 сентября 2018
string dom = project.Variables["dom"].Value;//Страница для парсинга

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();                       
doc.LoadHtml(dom);

var posts = doc.DocumentNode.SelectNodes(@"//div[@class = 'post']");//Сюда получаем все посты

foreach(var p in posts)//Тут перебираем посты
{
    string date = p.SelectSingleNode(@".//a").InnerText;//Тут с каждого поста берем текст из тега "<а>"
    string dt = System.Text.RegularExpressions.Regex.Match(date, @".*?(?=\sв)").Value;//Берем дату без времени
    if(dt.Contains(dtc)) lst.Add(p.OuterHtml);//Если звезды сошлись, кладем в список

}
Я перешел по ссылке https://www.nuget.org/api/v2/package/HtmlAgilityPack/1.8.7, после этого у меня сразу скачался файл htmlagilitypack.1.8.7.nupkg, в папку ExternalAssemblies вроде как файл dll нужно закинуть...а у меня файл скачался с расширением .nupkg Не могли бы вы более подробней расписать последовательность действий чтоб установить это пакет буду вам очень благодарен! Что то я не соображу как его засунуть в ZP
 

SergSh

Client
Регистрация
10.05.2017
Сообщения
541
Благодарностей
395
Баллы
63
Содержимое из папки архива в папку зеннопостера ExternalAssemblies
 

Вложения

orka13

Client
Регистрация
07.05.2015
Сообщения
2 167
Благодарностей
2 169
Баллы
113
Я перешел по ссылке https://www.nuget.org/api/v2/package/HtmlAgilityPack/1.8.7, после этого у меня сразу скачался файл htmlagilitypack.1.8.7.nupkg, в папку ExternalAssemblies вроде как файл dll нужно закинуть...а у меня файл скачался с расширением .nupkg Не могли бы вы более подробней расписать последовательность действий чтоб установить это пакет буду вам очень благодарен! Что то я не соображу как его засунуть в ZP
Чукча не читатель? Чукча писатель? Этот пост можно было найти покликав в тех темах, на которые выше давали ссылки тут.
 

ZbidZ

Client
Регистрация
26.12.2015
Сообщения
289
Благодарностей
5
Баллы
18
Это под либу HtmlAgilityPack. Остается ее засунуть в папку зеннопостера ExternalAssemblies и подключить в GAS и using
Код:
var lst = project.Lists["list"];//Список для результата
string dtc = project.Variables["data"].Value;//Дата для сравнения в формате - 12 сентября 2018
string dom = project.Variables["dom"].Value;//Страница для парсинга

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();                      
doc.LoadHtml(dom);

var posts = doc.DocumentNode.SelectNodes(@"//div[@class = 'post']");//Сюда получаем все посты

foreach(var p in posts)//Тут перебираем посты
{
    string date = p.SelectSingleNode(@".//a").InnerText;//Тут с каждого поста берем текст из тега "<а>"
    string dt = System.Text.RegularExpressions.Regex.Match(date, @".*?(?=\sв)").Value;//Берем дату без времени
    if(dt.Contains(dtc)) lst.Add(p.OuterHtml);//Если звезды сошлись, кладем в список

}
Доброго дня SergSh! Что то не удается обработать DOM страницы...выдает ошибку. Файлы все подключил. Я таких терминов не понимаю, ссылка на объект не указывает на экземпляр объекта. Что то прям беда какая то. Не могу вытянуть элементы страницы. upload_2018-10-9_18-9-36.png
 

SergSh

Client
Регистрация
10.05.2017
Сообщения
541
Благодарностей
395
Баллы
63
Доброго дня SergSh! Что то не удается обработать DOM страницы...выдает ошибку. Файлы все подключил. Я таких терминов не понимаю, ссылка на объект не указывает на экземпляр объекта. Что то прям беда какая то. Не могу вытянуть элементы страницы. Посмотреть вложение 32851
1. Добавить ссылки из GAC - System.Xml
2. Дописать using System.Xml; в общий код
 

ZbidZ

Client
Регистрация
26.12.2015
Сообщения
289
Благодарностей
5
Баллы
18
1. Добавить ссылки из GAC - System.Xml
2. Дописать using System.Xml; в общий код
А подскажите как это сделать? Что такое GAC? как оттуда взять ссылку? общий код вроде нашел это он?upload_2018-10-9_19-27-37.png
 

SergSh

Client
Регистрация
10.05.2017
Сообщения
541
Благодарностей
395
Баллы
63
GAS между списками возле общего кода (Синяя иконка). Редактировать - Добавить - В колонке название прописываем System.Xml и крутим тудасюда, находим и жмем на строку System.Xml 4.0.0.0 и OK в конце.
 

ZbidZ

Client
Регистрация
26.12.2015
Сообщения
289
Благодарностей
5
Баллы
18
GAS между списками возле общего кода (Синяя иконка). Редактировать - Добавить - В колонке название прописываем System.Xml и крутим тудасюда, находим и жмем на строку System.Xml 4.0.0.0 и OK в конце.
В GAC я уже добавлял такую строку. Добавил в общий код using System.Xml перезагрузил проект, всеравно выдает эту же ошибку(((2018-10-10_08-35-01.png 2018-10-10_08-35-43.png
 

SergSh

Client
Регистрация
10.05.2017
Сообщения
541
Благодарностей
395
Баллы
63
using HtmlAgilityPack; прописана?
переменные все прописаны?
список из кода также называется?
мб в шабе есть еще кубик с кодом и он фаршмачит все?
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 167
Благодарностей
2 169
Баллы
113
Дык у него "Директивы Using" пустые. Я не понимаю почему нельзя скачать мой пример шаблона по ссылке из того поста и нем все сделать, либо посмотреть как в шаблоне и перенести все один в один в свой. Нет бля, проще 100 раз переспрашивать что где вставлять....
 

ZbidZ

Client
Регистрация
26.12.2015
Сообщения
289
Благодарностей
5
Баллы
18
using HtmlAgilityPack; прописана?
переменные все прописаны?
список из кода также называется?
мб в шабе есть еще кубик с кодом и он фаршмачит все?
Да конечно все переменные так же называются...список result называется... кубиков больше нет, я использую всего 2 куба, это получить дом, ну и из него уже разметку нужно вытащить
 

ZbidZ

Client
Регистрация
26.12.2015
Сообщения
289
Благодарностей
5
Баллы
18
using HtmlAgilityPack; прописана?
переменные все прописаны?
список из кода также называется?
мб в шабе есть еще кубик с кодом и он фаршмачит все?
Ссылки везде все указанно, переменные проверил ошибки в их написании отсутствуют....не пойму почему выдает эту ошибку(
 

ZbidZ

Client
Регистрация
26.12.2015
Сообщения
289
Благодарностей
5
Баллы
18
Дык у него "Директивы Using" пустые. Я не понимаю почему нельзя скачать мой пример шаблона по ссылке из того поста и нем все сделать, либо посмотреть как в шаблоне и перенести все один в один в свой. Нет бля, проще 100 раз переспрашивать что где вставлять....
Уважаемый корректней выражайся...че ты мне тут блякаешь? у меня все прописанно...это был старый скрин, после я дописал но все равно выдает эту ошибку...скачал я твой шаблон, все сверил с своим, и все у меня так же прописано....поэтому если ты что то знаешь то пиши конкретно, если что то против имеешь позвони мне пообщаемся и я тебе расскажу кто что и зачем
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)