Парсинг сообщений с форума

spmwork1

Новичок
Регистрация
09.09.2018
Сообщения
16
Благодарностей
0
Баллы
1
Доброй ночи! Интересует как можно спарсить сообщения с форума, в правильном порядке?

Думал долго на счет задачи, пришло в голову несколько идей.

Есть для примера сайт http://www.vestnik-sadovoda.ru/forum/viewtopic.php?f=20&t=897

Нужно спарсить данные в таком формате

имя пользователя;дата сообщения;само сообщение
Пробовал сделать с помощью регулярки и брать все, но получается берет сразу все логины в список и не получается сопоставить в том формате.

Может стоит для начала подсчитать количество сообщений, а потом с помощью цикла по очереди брать имя пользователя, дату сообщения, сам текст сообщения?

Подскажите как лучше сделать это?

Спасибо за помощь!
 

DmitryAk

Client
Регистрация
14.12.2016
Сообщения
860
Благодарностей
824
Баллы
93
Код:
project.Lists["posts"].Clear();
HtmlElementCollection pst = instance.ActiveTab.FindElementsByAttribute("div","class","postbody","text");

foreach (HtmlElement he in pst)
{
   HtmlElement post = he.FindChildByAttribute("div","class","content","text",0);
   HtmlElement author = he.FindChildByAttribute("a", "href", "http://www.vestnik-sadovoda.ru/forum/memberlist.php\\?mode=viewprofile", "regexp", 0);
   HtmlElement dthe = he.FindChildByAttribute("p", "innertext", " »", "regexp", 0);
   
   string posttext = post.InnerHtml;
   string authortext = author.InnerText;
   string dt = dthe.InnerText;
   string rdt = Regex.Match(dt,@"(?<=»\ ).*",RegexOptions.IgnoreCase).Value;
     
   project.Lists["posts"].Add(authortext+";"+rdt+";"+posttext);
   
}
 
  • Спасибо
Реакции: kapelan28 и spmwork1

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
сначала по регулярке или работе с хтмл взять все блоки, отвечающие за комментарий. Потом уже с каждого блока отдельно парсить логин, дату т.д.
 

spmwork1

Новичок
Регистрация
09.09.2018
Сообщения
16
Благодарностей
0
Баллы
1
Код:
project.Lists["posts"].Clear();
HtmlElementCollection pst = instance.ActiveTab.FindElementsByAttribute("div","class","postbody","text");

foreach (HtmlElement he in pst)
{
   HtmlElement post = he.FindChildByAttribute("div","class","content","text",0);
   HtmlElement author = he.FindChildByAttribute("a", "href", "http://www.vestnik-sadovoda.ru/forum/memberlist.php\\?mode=viewprofile", "regexp", 0);
   HtmlElement dthe = he.FindChildByAttribute("p", "innertext", " »", "regexp", 0);
  
   string posttext = post.InnerHtml;
   string authortext = author.InnerText;
   string dt = dthe.InnerText;
   string rdt = Regex.Match(dt,@"(?<=»\ ).*",RegexOptions.IgnoreCase).Value;
    
   project.Lists["posts"].Add(authortext+";"+rdt+";"+posttext);
  
}
спасибо за помощь!
 

spmwork1

Новичок
Регистрация
09.09.2018
Сообщения
16
Благодарностей
0
Баллы
1
Пробовал сделать похожий парсинг на другом сайте http://www.stavochka.com/forum/viewtopic.php?f=1&t=1129

Используя тот снипет который предложил @DmitryAk

Подставил регулярки на те, которые на другом сайте, но результат пустой. Кто может подсказать, что не так я сделал в этом коде?

Код:
project.Lists["posts"].Clear();
HtmlElementCollection pst = instance.ActiveTab.FindElementsByAttribute("div","class","postbody","text");
foreach (HtmlElement he in pst)
{
   HtmlElement post = he.FindChildByAttribute("div","class","postbody","text",0);
   HtmlElement author = he.FindChildByAttribute("b","class","postauthor","text", 0);
   HtmlElement dthe = he.FindChildByAttribute("div", "innertext", "Добавлено:\ \ ", "regexp", 0);
   
   string posttext = post.InnerHtml;
   string authortext = author.InnerText;
   string rdt = dthe.InnerText;
     
   project.Lists["posts"].Add(authortext+";"+rdt+";"+posttext);
   
}
 

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