1

我实际上是在尝试从具有一些子标签的标签中获取文本

例如

<p><span>Child Text </span><span class="price">Child Text</span><br />
I need this text</p>

这就是我正在尝试的

HtmlElement menuElement = browser.Document.GetElementsByTagName("p");
String mytext = menuElement.InnerHtml;   //also tried innerText,OuterHtml,OuterText

更新:我认为我必须使用 Htmlagilitypack,所以现在我的问题是如何使用 htmlagilitypack lib 来做到这一点,我是新手。

谢谢

4

3 回答 3

2

从使用正则表达式到网络抓取库,有很多方法。我建议您使用 htmlagilitypack ,您可以通过 xpath 准确解决您需要的内容。将引用和命名空间添加到 HtmlAgilityPack 并且我正在使用 linq(这需要 .net 3.5 或更高版本)以及下面的代码,您可以做到这一点。

using HtmlAgilityPack;
using System.Linq;

// 这些引用必须可用。

        private void Form1_Load(object sender, EventArgs e)
        {
            var rawData = "<p><span>Child Text </span><span class=\"price\">Child Text</span><br />I need this text</p>";
            var html = new HtmlAgilityPack.HtmlDocument();
            html.LoadHtml(rawData);
            html.DocumentNode.SelectNodes("//p/text()").ToList().ForEach(x=>MessageBox.Show(x.InnerHtml));
        }
于 2012-04-28T19:49:18.430 回答
0

如果您可以将“需要此文本”放在带有 id 的 span 中,那就容易多了——然后您只需抓住该 id 的 .innerHTML()。如果您不能更改标记,您可以获取 menuElement 的 .innerHTML() 和字符串匹配“
”之后的内容,但这很脆弱。

于 2012-04-28T19:33:57.000 回答
0

您可以通过将 DocumentText 拆分为不同的部分来获取文本。

string text = "<p><span>Child Text </span><span class="price">Child Text</span><br />I need this text</p>";
text = text.Split(new string{"<p><span>Child Text </span><span class="price">Child Text</span><br />"}, StringSplitOptions.None)[1];
// Splits the first part of the text, leaving us with "I need this text</p>"
// We can remove the last </p> many ways, but here I will show you one way.
text = text.Split(new string{"</p>"}, StringSplitOptions.None)[0];
// text now has the value of "I need this text"

希望这可以帮助!

于 2012-04-28T21:00:51.387 回答