2012-01-05 100 views
1

我抓取某個網頁www.thenextweb.com在C#中使用HtmlAgilityPack節點的列表中提取特定的節點值

我想提取所有帖子的鏈接,文章內容,文章圖像等

我寫了這個代碼...

string url = TextBox1.Text.ToString(); 
     var webGet = new HtmlWeb(); 
     var document = webGet.Load(url); 

     var infos = from info in document.DocumentNode.SelectNodes("//div[@class='article-listing']") 
        select new 
        { 
         Contr = info.InnerHtml 
        }; 

     lvLinks.DataSource = infos; 
     lvLinks.DataBind(); 

這extracs從頁面中所有需要的信息......我已經使用使用ListView控件在asp.net頁面首頁此informatin作爲

<li> <%# Eval("Contr") %> </li> 

現在,我想要的是一種方法trhough,我可以提取節點信息 我們都存在於相關信息方含鏈接URL,後期圖片文字等

的節點我想辦法讓我可以將它們存儲爲URL [0],PostContent [0],PostImage [0],Date [0]和URL [1],PostContent [1]等等,所有這些都包含被存儲在這些數組字符串中的重要值。 ... ...每個職位一個接一個...

它就像從信息的內部節點逐一提取信息。

請推薦一個方法嗎?

回答

1

爲什麼不創建一個解析HTML並將這些節點作爲屬性公開的類。

class ArticleInfo 
{ 
    public ArticleInfo (string html) { ... } 
    public string URL { get; set; } 
    public string PostContent { get; set; } 
    public string PostImage { get; set; } 
    public DateTime PostDate { get; set; } 
} 

然後,您可以做這樣的事情:

var infos = from info in document.DocumentNode.SelectNodes("//div[@class='article-listing']") 
      select new ArticleInfo(info.InnerHtml); 

然後,如果你有這些'infoArray = infos.ToArray()」你可以做一個數組:

infoArray[0].URL 
infoArray[0].PostDate 
infoArray[1].PostContent 

etc... 

更新

類似這樣的:

class ArticleInfo 
{ 
    private string html; 

    public ArticleInfo (string html) 
    { 
     this.html = html; 
     URL = //code to extract and assign Url from html 
     PostContent = //code to extract content from html 
     PostImage = //code to extract Image from html 
     PostDate = //code to extract date from html 
    } 

    public string URL { get; private set; } 
    public string PostContent { get; private set; } 
    public string PostImage { get; private set; } 
    public DateTime PostDate { get; private set; } 

    public string Contr { get { return html; } } 
} 

或也許這:

class ArticleInfo 
{ 
    private string html; 

    public ArticleInfo (string html) 
    { 
     this.html = html; 
    } 

    public string URL { get { return /*code to extract and return Url from html*/; } } 
    public string PostContent { get { return /*code to extract and return Content from html*/; } } 
    public string PostImage { get { return /*code to extract and return Image from html*/; } } 
    public DateTime PostDate { get { return /*code to extract and return Date from html*/; } } 

    public string Contr { get { return html; } } 
} 

您的鏈接查詢然後返回的ArticleInfo而不是匿名類型的序列。這樣您就不必爲帖子的每個元素維護單獨的數組。數組(或序列)中的每個項目都具有屬性,以便爲該項目提供關聯的元素。當然,這可能不適合你想要達到的目標。我只是覺得它可能會更清潔一些。

+0

嘿,我沒有清楚地告訴你...你能否提供完整的代碼來訪問我的問題中提到的信息? – ItsLockedOut 2012-01-05 07:23:34

+0

@iKunu - 查看更新 – 2012-01-05 17:38:18

+0

謝謝...我現在就開始工作 – ItsLockedOut 2012-01-05 18:17:28

相關問題