从站点中提取特定链接

时间:2017-03-17 04:42:15

标签: c# html web-scraping html-agility-pack

我试图从网站上提取链接,我想要的HTML如下所示:

<div class="default-2-3">
<h4>
  <a href="/en/news/esports/esports-editorial/na-lcs-week-8-tease-tsm">NA LCS Week 8 Tease: TSM</a>
 </h4>

我的测试代码如下:

string mainURL = "http://na.leagueoflegends.com/en/news/";
HtmlAgilityPack.HtmlWeb web = new HtmlAgilityPack.HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = web.Load(mainURL);

var findClass = doc.DocumentNode.Descendants("div")
                   .Where(d => d.Attributes.Contains("class") && 
                               d.Attributes["class"].Value.Contains("default-2-3"));
MessageBox.Show(findClass.ElementAt(1).ToString());

目前,消息框显示:

  

HtmlAgilityPack.htmlNode

我的代码基于finding specific link from website,我不熟悉使用HTMLAgilityPack而不仅仅是复制XPath。

作为参考,我尝试提取信息的网站是:http://na.leagueoflegends.com/en/news/

2 个答案:

答案 0 :(得分:1)

你已接近最后一步。再多一点。

var findClass = doc.DocumentNode.Descendants("div").Where(d => d.Attributes.Contains("class") && d.Attributes["class"].Value.Contains("default-2-3")).Select(_ => _.Descendants("a").FirstOrDefault()?.Attributes["href"]);

答案 1 :(得分:0)

实际上有多个div具有相同的class=default-2-3 你试图通过这样做来获取你能得到的第一个:

var href = doc.DocumentNode.SelectNodes(".//div[@class='default-2-3']//h4//a[@href]").Select(x=>x.Attributes["href"].Value);