【问题标题】:How do I extract specific HTML's part of text using HtmlAgilityPack?如何使用 HtmlAgilityPack 提取特定 HTML 的文本部分?
【发布时间】:2015-10-05 22:27:11
【问题描述】:

查看页面的页面源时,我使用 CTRL-F 查找所有出现的“id=”,这给了我 82 个结果。我想要做的是只提取“id =”之后的数字。例如,如果属性是id=344,那么我只想获取 344 作为字符串并将其添加到列表中。

我现在这样做的方式我没有得到链接我以为我会以这种方式获取所有链接并在它之后进行过滤,但我得到的是空字符串和一些我想要的文本。我猜做 InnerText 是错误的。

Source View

idsnumbers = new List<string>();
HtmlWeb hw = new HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = hw.Load("http://www.tapuz.co.il/forums2008/");
foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
{
    idsnumbers.Add(link.InnerText);
}

更新获取空异常:

System.NullReferenceException was unhandled
  _HResult=-2147467261
  _message=Object reference not set to an instance of an object.
  HResult=-2147467261
  IsTransient=false
  Message=Object reference not set to an instance of an object.
  Source=WindowsFormsApplication1
  StackTrace:
       at WindowsFormsApplication1.Form1..ctor() in d:\C-Sharp\Tapuz Images\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs:line 50
       at WindowsFormsApplication1.Program.Main() in d:\C-Sharp\Tapuz Images\WindowsFormsApplication1\WindowsFormsApplication1\Program.cs:line 19
       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: 

【问题讨论】:

    标签: c# .net winforms html-agility-pack


    【解决方案1】:

    您应该从属性中读取 id。 InnerText 仅用于标签 inside 的文本,位于左括号和右括号之间。所以:

    foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
    {
        idsnumbers.Add(link.Attributes["id"].Value);
    }
    

    如果您想进一步仅从 id 中提取数字,您可以使用 RegExint.TryParse

    【讨论】:

    • torvin 我在线上遇到异常空值:idsnumbers.Add(link.Attributes["id"].Value);我在我的问题中添加了异常完整消息。
    • 如果link.Attributes["id"] 为空,那么您的&lt;a&gt; 没有它。只需添加一个空检查。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多