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

  • Автор темы Автор темы ZbidZ
  • Дата начала Дата начала

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
 
как дату собираешся фильтровать? что с месяцами делать? что важно?
В переменной будет только 12 сентября 2018, по этой строке нужно будет отфильтровать элемент ссылки в которой текст в формате 12 сентября 2018 в 15:00. Думаю через регулярку (в 15:00) отсечь, оставаться будет 12 сентября 2018, провести сравнение, если строка переменной совпадает с отсеченной строкой inerText элемента post_date, то элемент post c подходящим под условие сравнения даты, поместить в переменную.
 
как дату собираешся фильтровать? что с месяцами делать? что важно?
важно получить элемент post и записать его в переменную или в текстовый файл, со всеми вложеностями, но фильтрация элементов проходит по потомку класса post_date
 
HtmlAgilityPack нужно будет установить
Мне кажется это будет излишком для простого шаблона. Как то через javaScript можно отфильтровать и получить коллекцию....вот только не соображу как....знаю есть разные методы в javaScript именно связанные с DOM деревом элементов и их взаимодействием....там и фильтрация есть, но вот только не силен я в JS....Или вы имеете ввиду что эта библиотека как раз и будет работать для JS???
 
Это под либу 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
Это под либу HtmlAgilityPack. Остается ее засунуть в папку зеннопостера ExternalAssemblies и подключить в GAS и using
Спасибо SergSh....попробую данным методом реализовать....отпишусь попозже
 
Это под либу 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
 
Я перешел по ссылке https://www.nuget.org/api/v2/package/HtmlAgilityPack/1.8.7, после этого у меня сразу скачался файл htmlagilitypack.1.8.7.nupkg, в папку ExternalAssemblies вроде как файл dll нужно закинуть...а у меня файл скачался с расширением .nupkg Не могли бы вы более подробней расписать последовательность действий чтоб установить это пакет буду вам очень благодарен! Что то я не соображу как его засунуть в ZP
Чукча не читатель? Чукча писатель? Этот пост можно было найти покликав в тех темах, на которые выше давали ссылки тут.
 
Это под либу 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! Что то не удается обработать DOM страницы...выдает ошибку. Файлы все подключил. Я таких терминов не понимаю, ссылка на объект не указывает на экземпляр объекта. Что то прям беда какая то. Не могу вытянуть элементы страницы. Посмотреть вложение 32851
1. Добавить ссылки из GAC - System.Xml
2. Дописать using System.Xml; в общий код
 
1. Добавить ссылки из GAC - System.Xml
2. Дописать using System.Xml; в общий код
А подскажите как это сделать? Что такое GAC? как оттуда взять ссылку? общий код вроде нашел это он?upload_2018-10-9_19-27-37.png
 
GAS между списками возле общего кода (Синяя иконка). Редактировать - Добавить - В колонке название прописываем System.Xml и крутим тудасюда, находим и жмем на строку System.Xml 4.0.0.0 и OK в конце.
 
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
 
Дык у него "Директивы Using" пустые. Я не понимаю почему нельзя скачать мой пример шаблона по ссылке из того поста и нем все сделать, либо посмотреть как в шаблоне и перенести все один в один в свой. Нет бля, проще 100 раз переспрашивать что где вставлять....
 
using HtmlAgilityPack; прописана?
переменные все прописаны?
список из кода также называется?
мб в шабе есть еще кубик с кодом и он фаршмачит все?
Да конечно все переменные так же называются...список result называется... кубиков больше нет, я использую всего 2 куба, это получить дом, ну и из него уже разметку нужно вытащить
 
using HtmlAgilityPack; прописана?
переменные все прописаны?
список из кода также называется?
мб в шабе есть еще кубик с кодом и он фаршмачит все?
Ссылки везде все указанно, переменные проверил ошибки в их написании отсутствуют....не пойму почему выдает эту ошибку(
 
Дык у него "Директивы Using" пустые. Я не понимаю почему нельзя скачать мой пример шаблона по ссылке из того поста и нем все сделать, либо посмотреть как в шаблоне и перенести все один в один в свой. Нет бля, проще 100 раз переспрашивать что где вставлять....
Уважаемый корректней выражайся...че ты мне тут блякаешь? у меня все прописанно...это был старый скрин, после я дописал но все равно выдает эту ошибку...скачал я твой шаблон, все сверил с своим, и все у меня так же прописано....поэтому если ты что то знаешь то пиши конкретно, если что то против имеешь позвони мне пообщаемся и я тебе расскажу кто что и зачем
 

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