使用 HtmlAgilityPack 获取 href innertext
Get the href innertext with HtmlAgilityPack
我正在尝试创建一个新闻代理以从 websites.so 获取新闻,我必须使用 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&_56_INSTANCE_tVzMoLp4zfGh_mode=news&_56_INSTANCE_tVzMoLp4zfGh_newsId=3153832&p_p_state=maximized">› پانل «بررسي سازوکارهاي تأمين منابع مالي براي توسعۀ فناوري» بهعنوان پانل برتر پنجمين کنفرانس بينالمللي و نهمين کنفرانس ملي مديريت فناوري معرفي شد</a>
<a href="/news?p_p_id=56_INSTANCE_tVzMoLp4zfGh&_56_INSTANCE_tVzMoLp4zfGh_mode=news&_56_INSTANCE_tVzMoLp4zfGh_newsId=3135970&p_p_state=maximized">› فرآیند و فرم درخواست استفاده از تسهیلات حمایتی بلاعوض صندوق نوآوری و شکوفایی جهت حضور شرکت های دانش بنیان در جایزه ملی مدیریت فناوری و نوآوری</a>
所以问题是我可以得到 href link
但不能得到 href value
。我的意思是我可以得到新闻 url 但不能得到标题 پانل «بررسي سازوکارهاي تأمين منابع مالي براي توسعۀ فناوري» بهعنوان پانل برتر پنجمين کنفرانس بينالمللي و نهمين کنفرانس ملي مديريت فناوري معرفي شد
.
我怎样才能得到它?
你可以这样使用:
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
}
我应该使用这段代码来获取 href 的内部文本:
string tistle = item.Descendants("a").ToList()[0].InnerText;
您的代码可以稍微清理成这样:
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]
来获取 IEnumerable<T>
的第一项。
我正在尝试创建一个新闻代理以从 websites.so 获取新闻,我必须使用 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&_56_INSTANCE_tVzMoLp4zfGh_mode=news&_56_INSTANCE_tVzMoLp4zfGh_newsId=3153832&p_p_state=maximized">› پانل «بررسي سازوکارهاي تأمين منابع مالي براي توسعۀ فناوري» بهعنوان پانل برتر پنجمين کنفرانس بينالمللي و نهمين کنفرانس ملي مديريت فناوري معرفي شد</a>
<a href="/news?p_p_id=56_INSTANCE_tVzMoLp4zfGh&_56_INSTANCE_tVzMoLp4zfGh_mode=news&_56_INSTANCE_tVzMoLp4zfGh_newsId=3135970&p_p_state=maximized">› فرآیند و فرم درخواست استفاده از تسهیلات حمایتی بلاعوض صندوق نوآوری و شکوفایی جهت حضور شرکت های دانش بنیان در جایزه ملی مدیریت فناوری و نوآوری</a>
所以问题是我可以得到 href link
但不能得到 href value
。我的意思是我可以得到新闻 url 但不能得到标题 پانل «بررسي سازوکارهاي تأمين منابع مالي براي توسعۀ فناوري» بهعنوان پانل برتر پنجمين کنفرانس بينالمللي و نهمين کنفرانس ملي مديريت فناوري معرفي شد
.
我怎样才能得到它?
你可以这样使用:
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
}
我应该使用这段代码来获取 href 的内部文本:
string tistle = item.Descendants("a").ToList()[0].InnerText;
您的代码可以稍微清理成这样:
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]
来获取 IEnumerable<T>
的第一项。