簡體   English   中英

C#htmlagilitypack-如何從網頁中提取特定文本

[英]c# htmlagilitypack - how to extract specific text from web page

我正在嘗試從中提取描述
http://www.wowhead.com/quest=35151/your-base-your-choice
並將其顯示到richTextBox控件中。

輸出應為:

您已經在霜火中建造了一支令人印象深刻的駐軍。 我相信我應該把這個下一個選擇交給您。 Gorgrond的一個地區資源豐富。 一家木材廠可以幫助我們充分利用它們。 另一個地區擁有堅硬的角斗士。 爭奪競技場將有助於說服他們為我們的事業而戰。 在我們尋求發現和削弱鋼鐵部落的道路上,任何一條道路都會使我們得到加強。 指揮官,您選擇哪個?

以下是到目前為止我嘗試過的代碼。

HtmlAgilityPack.HtmlDocument html = new HtmlAgilityPack.HtmlDocument();
            html.LoadHtml(new WebClient().DownloadString("http://www.wowhead.com/quest=35151"));            
            var root = html.DocumentNode;
            var p = root.Descendants("h2")
                .Where(n => n.GetAttributeValue("class", "")
                .Equals("heading-size-3"))
                .FirstOrDefault().NextSibling;
            richTextBox1.Text = p.InnerText;

但是我得到的是:

您已經在霜火中建造了一支令人印象深刻的駐軍。 我相信我應該把這個下一個選擇交給您。

我為我的英語道歉。

您需要遍歷第一個.heading-size-3之間的所有同級,直到下一個標頭.heading-size-3

HtmlAgilityPack.HtmlDocument html = new HtmlAgilityPack.HtmlDocument();
html.LoadHtml(new WebClient().DownloadString("http://www.wowhead.com/quest=35151"));
var root = html.DocumentNode;
var descriptionHeader = root.Descendants("h2")
    .Where(n => n.GetAttributeValue("class", "")
    .Equals("heading-size-3"))
    .FirstOrDefault();
var current = descriptionHeader.NextSibling;
var result = "";
while(current != null && !current.GetAttributeValue("class", "")
    .Equals("heading-size-3"))
{
    if (!string.IsNullOrEmpty(current.InnerText))
    {
        result += " "+current.InnerText;
    }
    current = current.NextSibling;
}
richTextBox1.Text = result;

最后,您將收到:

您已經在霜火中建造了一支令人印象深刻的駐軍。 我相信我應該把這個下一個選擇交給您。 Gorgrond的一個地區資源豐富。 一家木材廠可以幫助我們充分利用它們。 另一個地區擁有堅硬的角斗士。 爭奪競技場將有助於說服他們為我們的事業而戰。 在我們尋求發現和削弱鋼鐵部落的道路上,任何一條道路都會使我們得到加強。 指揮官,您選擇哪個?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM