使用HtmlAgilityPack获取href innertext

时间:2016-01-16 08:22:31

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

我正在尝试创建一个新闻代理来从网站上获取新闻。所以我必须使用html parser HtmlAgilityPack。所以你可以看到我的代码:

public async void parsing(string website)
{
    HttpClient http = new HttpClient();
    var response = await http.GetByteArrayAsync(website);
    String source = Encoding.GetEncoding("utf-8").GetString(response, 0, response.Length - 1);
    source = WebUtility.HtmlDecode(source);
    HtmlDocument resultat = new HtmlDocument();
    resultat.LoadHtml(source);
    List<HtmlNode> toftitle = resultat.DocumentNode.Descendants().Where
      (x => (x.Name == "div" && x.Attributes["class"] != null && x.Attributes["class"].Value.Contains("latest-news"))).ToList();
    var li = toftitle[0].Descendants("li").ToList();
    foreach (var item in li)
    {
        var link = item.Descendants("a").ToList()[0].GetAttributeValue("href", null);
        var img = item.Descendants("img").ToList()[0].GetAttributeValue("src", null);
    }
}

这是我应该解析的html代码:

<a href="/news?p_p_id=56_INSTANCE_tVzMoLp4zfGh&amp;_56_INSTANCE_tVzMoLp4zfGh_mode=news&amp;_56_INSTANCE_tVzMoLp4zfGh_newsId=3153832&amp;p_p_state=maximized">› پانل «بررسي سازوکارهاي تأمين منابع مالي براي توسعۀ فناوري» به‌عنوان پانل برتر پنجمين کنفرانس بين‌المللي و نهمين کنفرانس ملي مديريت فناوري معرفي شد</a>


<a href="/news?p_p_id=56_INSTANCE_tVzMoLp4zfGh&amp;_56_INSTANCE_tVzMoLp4zfGh_mode=news&amp;_56_INSTANCE_tVzMoLp4zfGh_newsId=3135970&amp;p_p_state=maximized">› فرآیند و فرم درخواست استفاده از تسهیلات حمایتی بلاعوض صندوق نوآوری و شکوفایی جهت حضور شرکت های دانش بنیان در جایزه ملی مدیریت فناوری و نوآوری</a>

所以问题是我可以获得href link而不是href value。我的意思是我可以获取新闻网址而不是标题پانل «بررسي سازوکارهاي تأمين منابع مالي براي توسعۀ فناوري» به‌عنوان پانل برتر پنجمين کنفرانس بين‌المللي و نهمين کنفرانس ملي مديريت فناوري معرفي شد

我怎么能得到它?

3 个答案:

答案 0 :(得分:2)

我应该使用此代码来获取href:

的innertext
string tistle = item.Descendants("a").ToList()[0].InnerText;

答案 1 :(得分:1)

你可以像这样使用:

{{1}}

答案 2 :(得分:0)

您的代码可以稍微清理一下:

CursorAdaptor

基本上,您应该使用List<HtmlNode> toftitle = resultat.DocumentNode .Descendants("div") .Where(x => GetAttributeValue("class","").Contains("latest-news")) .First(); foreach (HtmlNode item in toftitle.Descendants("li")) { var link = item.Descendants("a").First(); var url = link.GetAttributeValue("href", null); //get the link url var text = link.InnerText.Trim(); //get the link text var img = item.Descendants("img").First().GetAttributeValue("src", null); } First()代替FirstOrDefault()来获取ToList()[0]的第一项。