如何在C#中使用HTML Agility Pack通过部分文本查找链接
嘿,这问题很好解决!你当前的代码用==做精确匹配,所以只能找到和keywords完全一致的div/h1文本。要实现你要的“输入部分文本就能匹配”的效果,只需要把精确相等的判断改成包含判断就可以了。
核心修改点
原来的判断逻辑是严格相等:
if (keywords == title.SelectSingleNode("div/h1").InnerText)
我们把它改成检查文本是否包含关键词:
var h1Text = title.SelectSingleNode("div/h1").InnerText; if (h1Text.Contains(keywords))
如果需要忽略大小写(比如输入"tiger stripe"也能匹配HTML里的"Tiger Stripe Rayon Shirt"),可以用更灵活的大小写不敏感判断:
if (h1Text.IndexOf(keywords, StringComparison.OrdinalIgnoreCase) >= 0)
完整的健壮版代码
我还帮你加了空值判断,避免页面结构异常时抛出空引用错误,让代码更稳定:
foreach (var title in htmlNodes) { // 先获取节点,避免直接调用InnerText导致空引用 var h1Node = title.SelectSingleNode("div/h1"); var pNode = title.SelectSingleNode("div/p"); if (h1Node != null && pNode != null) { string h1Text = h1Node.InnerText; string pText = pNode.InnerText; // 部分匹配h1文本,保持p文本的精确匹配(如果p也需要部分匹配,同理修改) if (h1Text.Contains(keywords) && pText == color) { var linkNode = title.SelectSingleNode("div/p/a"); if (linkNode != null) { Console.WriteLine(linkNode.GetAttributeValue("href", "pas d'addresse")); } } } }
额外提示
- 结合你提供的HTML结构,当
keywords设为"Tiger Stripe"时,就能匹配到<h1>里的"Tiger Stripe Rayon Shirt"元素了。 - 如果
color也需要部分匹配,把pText == color改成pText.Contains(color)或者大小写不敏感的判断就行。
内容的提问来源于stack exchange,提问作者lucky simon
相关产品推荐
相关产品推荐

