2017-03-17 56 views
1

我試圖從網站拉鍊接拉動特定的鏈接,我想要的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/

+0

可以共享鏈接,這將是更容易測試? –

+0

我添加了鏈接。 M adeel – lostknight

回答

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"]); 
+0

Hello hung Cao,但是當我使用MessageBox.Show(findClass.ElementAt(1).ToString())的時候,我使用了代碼。我仍然在消息框中獲得htmlagilitypack。 – lostknight

+0

它是一個HtmlAttribute數組。如果你想獲得第一個項目,然後'findClass.ElementAt(1).Value' –

0

其實有一個以上的分度,同樣class=default-2-3 您正在試圖獲取第一個,你可以通過這樣得到:

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

你好M Adeel,我想拉多個鏈接。 – lostknight

+0

請參閱編輯答案。 –