2011-06-29 12 views
2

ここにC#があります。私はこれをグーグルで試してみて、私が必要とするものではないカップルの答えを得ました。私はウェブサイトから(X)HTMLをつかんで、特定の要素をつかむためにDOM(実際には、CSSセレクタが望ましいが、何でもよい)を使いたいと思う。これはC#でどのくらい正確に行われますか?C#のWebサイトからコンテンツを取得しています

+0

私たちはで動作するようにするためにあなたには、いくつかのサンプルコードを追加してもらえますか? – jp2code

+0

コメントを落とすことはできません。 –

答えて

0

HTMLファイルの操作にHtmlAgilityPackを使用します。これはあなたにLinqへのアクセスを与えるでしょう。良いこと(tm)です。ファイルはSystem.Net.WebClientでダウンロードできます。

0

Html Agility Packを使用すると、htmlを読み込んで必要な要素を見つけることができます。

2

HTMLを取得するには、WebClientオブジェクトを使用できます。

HTMLを解析するには、HTMLAgility librraryを使用できます。

0

HttpWebRequestを使い始めると、URLの内容を簡単に取得できます。そこから、HTMLを解析するために何かする必要があります。それが難しいことが始まるところです。多くの(ほとんどの)ウェブサイトのHTMLページは100%有効なXMLではないので、通常のXMLパーサは使用できません。 Webブラウザは、無効部分を回避するために特別にパーサーを実装しています。 Rubyでは、Nokogiriのようなものを使用してHTMLを解析するので、.NETポートを探したり、HTMLを読むように特別に設計された別のパーサーを探したりすることもできます。


編集:

話題が出てくる可能性があるので:WebClient vs. HttpWebRequest/HttpWebResponse

また、HtmlAgilityに注目するために答えた人に感謝します。私はそれが存在するのか分からなかった。

2
// prepare the web page we will be asking for 
     HttpWebRequest request = (HttpWebRequest) 
      WebRequest.Create("http://www.stackoverflow.com"); 

     // execute the request 
     HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

     // we will read data via the response stream 
     Stream resStream = response.GetResponseStream(); 

     string tempString = null; 
     int count  = 0; 
     do 
     { 
      // fill the buffer with data 
      count = resStream.Read(buf, 0, buf.Length); 

      // make sure we read some data 
       if (count != 0) 
      { 
      // translate from bytes to ASCII text 
      tempString = Encoding.ASCII.GetString(buf, 0, count); 

      // continue building the string 
      sb.Append(tempString); 
      } 
     } 
     while (count > 0); // any more data to read? 

その後、あなたはあなたがページの取得にSystem.Net.WebClientまたはSystem.Net.HttpWebrequestを使用することができますが、要素のための解析はクラスによってサポートされていない

1

を必要とする要素をつかむためにXQuery式または正規表現を使用します。

使用HtmlAgilityPackhttp://html-agility-pack.net/

HtmlWeb htmlWeb = new HtmlWeb(); 
htmlWeb.UseCookies = true; 


HtmlDocument htmlDocument = htmlWeb.Load(url); 


// after getting the document node 
// you can do something like this 
foreach (HtmlNode item in htmlDocument.DocumentNode.Descendants("input")) 
{ 
    // item mathces your req 
    // take the item. 
} 
関連する問題