Вопрос об использовании Agility Pack (попытка анализа строки из источника)

c# html html-agility-pack html-parsing

Вопрос

Я пытаюсь использовать пакет Agility для анализа определенных бит информации с разных страниц. Я немного обеспокоен тем, что использование этого может быть излишним для того, что мне нужно, если это случай, не стесняйтесь, дайте мне знать. Во всяком случае, я пытаюсь разобрать страницу от пестрого дурака, чтобы получить название компании на основе тикера. Я буду разбирать несколько страниц, чтобы получить информацию о запасе аналогичным образом.

HTML, который я хочу разборки, выглядит так:

<h1 class="subHead"> 
    Microsoft Corp <span>(NASDAQ:MSFT)</span>
</h1>

Кроме того, страница, которую я хочу проанализировать, это: http://caps.fool.com/Ticker/MSFT.aspx

Итак, я думаю, мой вопрос заключается в том, как я могу просто получить Microsoft Corp из html, и должен ли я использовать пакет гибкости, чтобы делать такие вещи?

Изменить: Текущий код

public String getStockName(String ticker)
{
    String text ="";
    HtmlAgilityPack.HtmlWeb web = new HtmlAgilityPack.HtmlWeb();
    HtmlAgilityPack.HtmlDocument doc = web.Load("http://caps.fool.com/Ticker/" + ticker + ".aspx");

    var node = doc.DocumentNode.SelectSingleNode("/h1[@class='subHead']");
    text = node.FirstChild.InnerText.Trim();
    return text;
}

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

Это даст вам список всех имен акций, для вашего образца Html только Microsoft:

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.Load("test.html");

var nodes = doc.DocumentNode.SelectNodes("//h1[@class='subHead']");
foreach (var node in nodes)
{
    string text = node.FirstChild.InnerText; //output: "Microsoft Corp"
    string textAll = node.InnerText; //output: "Microsoft Corp (NASDAQ:MSFT)"
}

Изменить на основе обновленного вопроса - это должно сработать для вас:

string text = "";
HtmlWeb web = new HtmlWeb();

string url = string.Format("http://caps.fool.com/Ticker/{0}.aspx", ticker);
HtmlAgilityPack.HtmlDocument doc = web.Load(url);

var node = doc.DocumentNode.SelectSingleNode("//h1[@class='subHead']");
text = node.FirstChild.InnerText.Trim();
return text;

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

Используйте выражение xpath, чтобы выбрать элемент, затем введите текст.

 foreach (var element in doc.DocumentNode.SelectNodes("//h1[@clsss='subHead']/span"))
 {
    Console.WriteLine (element.InnerText);
 } 


Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему