Как получить доступ к содержимому нескольких
теги с HTMLAgilityPack?

c# html html-agility-pack wpf

Вопрос

Я не могу найти документацию для HTMLAgilityPack на веб-сайте codeplex. В настоящее время я хочу получить доступ к div на веб-сайте Amazon и очистить текстовую информацию для использования в приложении WPF.

var getWeb = new HtmlWeb();                     
var doc = getWeb.Load(uri);
HtmlNode ourNode = doc.DocumentNode.SelectSingleNode("//div[@id = 'zg_centerListWrapper']");

Этот div содержит около 12 других div, каждый из которых является предметом в категории best sellers .

Чтобы получить доступ к свойствам каждого из них, казалось бы, кропотливый (и я также не совсем уверен, как я это сделаю с первого взгляда). Так что я должен использовать DocumentNode.SelectNodes() ? И как мне его реализовать? Также мне трудно поверить, что после такого времени нет документации для HTMLAgilityPack ... Может быть, я ищу не в том месте, потому что youtube кажется моим лучшим источником на данный момент.

Принятый ответ

Фактически, параметр SelectNodes() и SelectSingleNode() - это выражение xpath, xpath version 1.0, чтобы быть точным (см. Здесь описание xpath 1.0 ).

XPath - это еще одна технология с собственной спецификацией, документацией и обсуждением. Обычно вы можете искать учебники xpath или статьи вместо спецификаций HtmlAgilityPack (HAP), чтобы лучше понять, какое выражение следует передать HAP для получения определенных элементов HTML.

Для примера предположим, что ваш HTML выглядит так:

<div id="zg_centerListWrapper">
    <div>I want this</div>
    <div>..and this</div>
    <div>..and this one too</div>
</div>

см., что div который вас интересует, являются прямыми div[@id = 'zg_centerListWrapper'] , тогда вы можете использовать следующий xpath для их получения:

var xpath = "//div[@id = 'zg_centerListWrapper']/div";
HtmlNodeCollection ourNodes = doc.DocumentNode.SelectNodes(xpath);

Популярные ответы

Вы можете использовать DocumentNode.Descendants("div") а затем что-то вроде

.Where(div => div.Attributes.Contains("class") && div.Attributes["class"].Value.Contains("best category"))

Но да, документация, безусловно, поможет ..



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow