【问题标题】:Retrieving specific URLs with HtmlAgilityPack C#使用 HtmlAgilityPack C# 检索特定 URL
【发布时间】:2017-07-14 13:16:26
【问题描述】:

我目前尝试使用 HtmlAgilityPack 从 html 页面中提取特定链接。我尝试使用普通的 C# 来强行进入,但结果证明这真的很痛苦。链接都在 <div> 标记内,它们都具有相同的类。这是我所拥有的:

HtmlWeb web = new HtmlWeb();
HtmlDocument html = web.Load(url);

//this should select only the <div> tags with the class acTrigger
foreach (HtmlNode node in html.DocumentNode.SelectNodes("//div[@class='acTrigger']"))
{
    //not sure how to dig further in to get the href values from each of the <a> tags
}

网站代码看起来像这样

            <li>
                <div class="acTrigger">
                    <a href="/16014988/d/" onclick="return queueRefinementAnalytics('Category','Battery')">
                        Battery                                 <em>&nbsp;(1)</em>
                    </a>
                </div>
            </li>
            <li>
                <div class="acTrigger">
                    <a href="/15568540/d/" onclick="return queueRefinementAnalytics('Category','Brakes')">
                        Brakes                                 <em>&nbsp;(2)</em>
                    </a>
                </div>
            </li>
            <li>
                <div class="acTrigger">
                    <a href="/11436914/d/1979-honda-ct90-cables-lines" onclick="return queueRefinementAnalytics('Category','Cables/Lines')">
                        Cables/Lines                                 <em>&nbsp;(1)</em>
                    </a>
                </div>
            </li>

这个页面上有很多链接,但我需要的href 包含在那些嵌套在&lt;div class="acTrigger"&gt; 标记内的&lt;a&gt; 标记内。如果每个&lt;a&gt; 共享唯一的类会很简单,但不幸的是只有&lt;div&gt; 标记有类。我需要做的是获取每个hrefs 并存储它们,以便我以后可以检索它们,转到每一页,并从每一页检索更多信息。我只需要朝着正确的方向轻推以克服这个困难,然后我应该也可以完成其他页面。我以前没有使用此 HtmlAgilityPack 的经验,并且我发现的所有示例似乎都想从页面中提取所有 URL,而不是特定的 URL。我只需要一个示例或文档的链接,非常感谢任何帮助。

【问题讨论】:

    标签: c# html url html-agility-pack


    【解决方案1】:

    您应该能够更改您的选择以包含&lt;a&gt; 标签://div[@class='acTrigger']/a。这样你的HtmlNode 就是你的&lt;a&gt; 标签而不是div。

    要存储链接,您可以使用GetAttributeValue

    foreach (HtmlNode node in html.DocumentNode.SelectNodes("//div[@class='acTrigger']/a"))
    {
        // Get the value of the HREF attribute.
        string hrefValue = node.GetAttributeValue( "href", string.Empty );
        // Then store hrefValue for later.
    }
    
    猜你喜欢
    • 2020-02-24
    • 2014-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-24
    相关资源
    最近更新 更多