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

7

在这个字符串中存在li标签。我想获取像这样的a标签的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 添加到您的元素中,现在您可以访问属性。 - Ahmed Galal
最好使用HTML/XML解析器或至少正则表达式,而不是使用索引进行操作。 - Mehrzad Chehraz
对不起,Ahmed Galal。我想创建一个网络爬虫,但这是不可能的。 - hmahdavi
Mehrzad Chehraz:你能写一个样例代码吗? - hmahdavi
ahmed-galal:请编写一段示例代码。 - hmahdavi
请查看 http://htmlagilitypack.codeplex.com/ 和 https://msdn.microsoft.com/en-us/library/d271ytdx(v=vs.110).aspx。 - Mehrzad Chehraz
4个回答

4

您可以使用Html Agility Pack

Html Agility Pack 示例:

 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");

链接:

如何使用HTML Agility包

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 =====>>>>> HtmlDocument doc = new HtmlDocument(); - hmahdavi
1-下载并构建HTMLAgilityPack解决方案。 2-在您的应用程序中,将引用添加到HTMLAgilityPack\Debug(或Realease)\bin文件夹中的HTMLAgilityPack.dll。 - Ahmed Galal

4
您可以使用Selenium WebDriver功能:
IList<IWebElement> lis = driver.FindElements(By.CssSelector(".ull > li"));
foreach (IWebElement li in lis) {
    string href = li.GetAttribute("href");
}

你需要找到所有class为"ull"的WebElement下的li标签的子元素,并对列表进行迭代,获取href属性。

如何下载Selenium WebDriver? - hmahdavi
@programmer138200 你可以从这里下载。 - Guy
@programmer138200 安装指南 [guide] (http://software-testing-tutorials-automation.blogspot.co.il/2011/10/how-to-download-and-install-selenium.html) - Guy
谢谢你。我实现了这个,但是出现了错误。你的for语句正确吗?在我的项目中出现了错误! - hmahdavi
我修改了这一行并且目前正在工作。(By.CssSelector(".ull > li > a")). 我有一个问题,是否可能在不打开浏览器的情况下获取页面的源代码? - hmahdavi
显示剩余3条评论

1

为了更好地理解

Substring(a,b)

  • a:你想要开始 Substring 的位置
  • b:Substring 的长度是多少

在你的例子中,你将:

a 作为 ul 的起始索引

b 作为 ul 的结束索引 // 错误,b 应该是从字符串起始位置到 ul 结尾的长度!

你需要做的是:

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

_codeHtml = _codeHtml.Substring(a,c);

0

不使用任何外部库或工具,使用以下代码:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接