2016-01-16 2 views
1

Я пытаюсь создать новостной агент, чтобы получить новости из websites.so я должен использовать html parser как HtmlAgilityPack .so здесь ча увидеть мой код:Получить HREF InnerText с 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 .Я имею в виду я могу получить URL новости, но не название پانل «بررسي سازوکارهاي تأمين منابع مالي براي توسعۀ فناوري» به‌عنوان پانل برتر پنجمين کنفرانس بين‌المللي و نهمين کنفرانس ملي مديريت فناوري معرفي شد.

Как я могу это получить?

+1

Существует только одно значение для href, ссылка. «Заголовок», который вы хотите, является внутренним текстом элемента a. –

+0

@SamiKuhmonen так как я могу получить этот внутренний текст? –

+0

@SamiKuhmonen Я редактирую сообщение, я просто добавил один из элементов li –

ответ

1

Я просто должен использовать этот код, чтобы получить InnerText из HREF:

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

вы можете использовать, как это:

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); 
doc.LoadHtml(result); 
foreach (HtmlNode link in doc.DocumentNode.SelectNodes("a")) 
     { 
      string value = link.InnerText; // here you can get href value 
     } 
+0

Как я могу объединить ваш ответ с моим кодом? –

0

Ваш код может быть очищен немного, чтобы что-то вроде этого:

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() instea d от ToList()[0], чтобы получить первый элемент IEnumerable<T>.

Смежные вопросы