如何获取此字符串中标签的 href 属性?

Posted

技术标签:

【中文标题】如何获取此字符串中标签的 href 属性?【英文标题】:How to get href attributes of a tags in this string? 【发布时间】:2016-04-22 12:12:21 【问题描述】:

在这个字符串中存在数字 li 标签。我想要获取标签的 href 属性,例如:

http://bipardeh94.blogfa.com" target="_blank

http://avaejam.blogfa.com" target="_blank

和... 我想用 C# 做到这一点。如何做到这一点? 我使用了这段代码,但这并不完整。

int indexStartUl = _codehtml.IndexOf("<ul");
            int indexEndUl = _codeHtml.IndexOf("</ul>");
            _codeHtml = _codeHtml.Substring(indexStartUl, indexEndUl);

请帮忙。

 <ul class="ull">
        <li><a href="http://bipardeh94.blogfa.com" target="_blank">باغ بلور</a><span class="ur">bipardeh94.blogfa.com</span><span class="ds">فرهنگی-خبری-علمی</span></li>
        <li><a href="http://avaejam.blogfa.com" target="_blank">هزار نکته </a><span class="ur">avaejam.blogfa.com</span><span class="ds"> يك نكته از هزار نكته  باشد تا بعد </span></li>
        <li><a href="http://prkangavar.blogfa.com" target="_blank">روابط عمومی دانشگاه آزاداسلامی کنگاور</a><span class="ur">prkangavar.blogfa.com</span><span class="ds">اخبار دانشگاه</span></li>
        <li><a href="http://bordekhoun.blogfa.com" target="_blank">وبلاگ اطلاع رسانی بردخون</a><span class="ur">bordekhoun.blogfa.com</span><span class="ds">اخباروگزارشات وتحلیل ها درباره بردخون</span></li>
        <li><a href="http://mahinvare.blogfa.com" target="_blank">تدوری های نوین</a><span class="ur">mahinvare.blogfa.com</span><span class="ds">نظریه های علوم انسانی باید متحول شود</span></li>
        <li><a href="http://zanjanuniversity.blogfa.com" target="_blank">دانشگاه زنجان</a><span class="ur">zanjanuniversity.blogfa.com</span><span class="ds">اخبار دانشگاهیان زنجان و دانشگاه آزاد زنجان و سیستم ثبت نام شهردای زنجان </span>
        </li>
    </ul>

【问题讨论】:

将 runat='server' , ID=Name 添加到您的元素现在,您可以访问属性 您最好使用 HTML/XML 解析器或至少使用正则表达式,而不是使用索引。 对不起 Ahmed Galal。我想创建一个网络爬虫,但这是不可能的 Mehrzad Chehraz : 你能写一个示例代码吗? ahmed-galal : 请写一个示例代码。 【参考方案1】:

您可以使用Html Agility Pack

HTML 敏捷包示例:

 HtmlDocument doc = new HtmlDocument();
 doc.Load("file.htm");
 foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"])
 
    HtmlAttribute att = link["href"];
    att.Value = FixLink(att);
 
 doc.Save("file.htm");

链接:

How to use HTML Agility pack

http://www.mikesdotnetting.com/article/273/using-the-htmlagilitypack-to-parse-html-in-asp-net http://www.codeproject.com/Articles/691119/Html-Agility-Pack-Massive-information-extraction-f

我希望这些信息会有所帮助

【讨论】:

我下载这个 dll 文件并将其添加到我的项目中。然后我在 Form2.cs 文件中使用您的代码,但在此行中出现错误,无法访问内部构造函数 htmldocument here =====>>>>>HtmlDocument doc = new HtmlDocument(); 1-下载并构建 HTMLAgilityPack 解决方案。 2-在您的应用程序中,在 HTMLAgilityPack\Debug(或 Realease)\bin 文件夹中添加对 HTMLAgilityPack.dll 的引用。【参考方案2】:

您可以使用Selenium WebDriver 功能:

IList<IWebElement> lis = driver.FindElements(By.CssSelector(".ull > li"));
foreach (IWebElement li in lis) 
    string href = li.GetAttribute("href");

您可以找到所有带有li 标记的WebElement 的子级WebElementsull,然后遍历列表并获取href 属性。

【讨论】:

如何下载 Selenium WebDriver? @programmer138200 你可以从here下载 @programmer138200 安装guide Add selenium to VS 谢谢你。我实现了这个但我有一个错误。你的for语句是正确的吗?在我的项目中出现错误!【参考方案3】:

为了更好的理解

子串(a,b)

a : 你想从哪里开始你的子字符串 b : 子字符串的长度是多少

你的前任:

a 作为 ul 的起始索引

b as end index of ul // 错误 b 将是字符串从 ul 开始到结尾的长度!

你需要做的是:

int c = b - a // (will give you the inner text length)

_codeHtml = _codeHtml.Substring(a,c);

【讨论】:

【参考方案4】:

没有任何外部库或工具,使用以下行:

var hrefs = html.Split(new[]  "href='" , StringSplitOptions.RemoveEmptyEntries).Where(o => o.StartsWith("http")).Select(o => o.Substring(0, o.IndexOf("'")));

这将为您提供一个包含所有 href 的数组,如以下结果:

http://bipardeh94.blogfa.com
http://avaejam.blogfa.com
http://prkangavar.blogfa.com
http://bordekhoun.blogfa.com
http://mahinvare.blogfa.com
http://zanjanuniversity.blogfa.com

完整示例可在:this .net fiddle

【讨论】:

以上是关于如何获取此字符串中标签的 href 属性?的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有 API 的情况下获取 Instagram 中标签的所有图像?

javascript如何统计页面中标签的数量

我如何改变primefaces中标签的方向?

Go 中标签的用途是啥?

material UI - 如何更改 FormControlLabel 中标签的字体大小

如何从不同的方法访问 UICollectionViewCell 中标签的文本?