HTML Agility Pack Вопрос (Попытка разобрать строку из источника) - PullRequest
1 голос
/ 11 апреля 2011

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

HTML-код, который я хочу проанализировать, выглядит следующим образом:

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

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

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

Редактировать: Текущий код

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;
}

Ответы [ 2 ]

2 голосов
/ 11 апреля 2011

Это даст вам список всех названий акций для вашего примера 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;
1 голос
/ 11 апреля 2011

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

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