0

Использую код с сайта, он работает и с ним все хорошо. Но я не понимаю принципа

//создаем переменную и кладем в нее сразу через фунекцию код страницы 
var pageContent = LoadPage(@"https://www.noob-club.ru/");
//Создаем объект класса
var document = new HtmlDocument();
//Используем метод класса и отправляем в него код страницы 
document.LoadHtml(pageContent);

//дальше не совсем понятно
//Создаем коллекцию и кладем в не то что спарсили?
HtmlNodeCollection links = document.DocumentNode.SelectNodes("/html/body/div[5]/div/table/tbody/tr/td[1]/div[4]/span[1]/h1/a");
foreach (HtmlNode link in links)
    Console.WriteLine("{0} - {1}", link.InnerText, link.GetAttributeValue("href", "")); 

    //Этот код не сработает так как я незнаю что делает "link.InnerText, link.GetAttributeValue("href", "")" и не редактировал их.

    //Если я попытаюсь вывести содержимое коллекции
     HtmlNodeCollection links = document.DocumentNode.SelectNodes(".//h2/a");
     Console.WriteLine(links[1]);
    //то получу
    HtmlAgilityPack.HtmlNode

Как мне просто спарсить данные одним xpath и положить их в коллекцию? Сайт который в коде просто для примера.

  • Вы не понимаете что такое XPaht как минимум. Не стоит его копировать из всяких генераторов (браузеров), думайте что пишете. Сейчас вы пишете "Слушай, а возьми ка мне из документа html, в нем возьми body, там возьми 5-й div..." Что произойдет например, если нужный контент будет в div под номером 10? Или вовсе он перейдет куда то в другое место (в другой div например)? Вам нужно искать что-то уникальное в этой всей каше, например Id или class и уже по ним искать контент. – EvgeniyZ Dec 29 '19 at 17:31
  • Например если вы напишете "//td[@class='content']/div[@class='entry first']", то получите "ноды" всех новостей сайта, дальше вам по полученному результату нужно будет пройтись циклом и распарсить каждую "ноду", например получение заголовка - "./span[@class="entry-header"]" и у полученной "ноды" вызываете InnerText. Теперь сами InnerText и GetAttributeValue() - первое выдаст вам текст, который находится в этом месте, без html, а второе выдаст значение какого либо атрибута (в вашем коде это href у ссылки). – EvgeniyZ Dec 29 '19 at 17:35
  • Вот я пытаюсь спарсить https://www.google.com/search?q=free+proxy+list Вот код HtmlNodeCollection links = document.DocumentNode.SelectNodes("//div[starts-with(@class,'g')]/div[1]/div[1]/div[1]/a[1]"); foreach (HtmlNode link in links) Console.WriteLine("{0} - {1}", link.InnerText, link.GetAttributeValue("href","")); Я проверял xpath в 3х разных программах и он находит ссылки, а тут почему то ошибка. https://dotnetfiddle.net/Ef9NHv – User12351259599491 Dec 29 '19 at 21:42
  • Надо убрать tbody из XPath и тогда ноду(ы) находит, я проверял. Но, через xpath крайне неудобно работать, и потому лучше использовать css селекторы и AngleSharp, пример здесь ну и здесь. – Bulson Dec 29 '19 at 22:10
  • @User12351259599491 В коде, что вы скинули, посмотрите что у вас находится в pageContent, посмотрите, похожа ли та страница, что отдает вам гугл на ту, что он выдает в браузере. Я вам скажу, что нет. – EvgeniyZ Dec 29 '19 at 23:01

0 Answers0