C#でHTMLソースをダウンロードする方法


109

c#でWebアドレスを指定してHTMLソースを取得するにはどうすればよいですか?

回答:


185

WebClientクラスを使用してファイルをダウンロードできます。

using System.Net;

using (WebClient client = new WebClient ()) // WebClient class inherits IDisposable
{
    client.DownloadFile("http://yoursite.com/page.html", @"C:\localfile.html");

    // Or you can get the file content without saving it
    string htmlCode = client.DownloadString("http://yoursite.com/page.html");
}

注意:さらに制御が必要な場合は、HttpWebRequestクラスを確認してください(認証を指定できるなど)。
Richard

1
はい、HttpWebRequestを使用するとより詳細に制御できますが、client.UploadData(uriString、 "POST"、postParamsByteArray);を使用してWebClientでPOST要求を実行できます。
CMS

1
この周りのWebExceptionをキャッチするのは賢明ではないでしょうか?多分それは想定されていました。このメソッドで他の例外またはエラーをキャッチする必要がありますか?
ジョンワシャム2014

4
@JohnWasham-はい、ここで例外をキャッチするのが賢明でしょう。ただし、ありがたいことに、ほとんどのStackOverflow回答者はサンプルコードをできるだけ明確かつ簡潔にしています。サンプルコードを「現実」に近づけると、ノイズが増えるだけです。
Chris Rogers

私が直面する問題は、ページソースをダウンロードしてデータを取得するとき、そのWebサイトが私のページソース以外の言語である場合よりもこれらの値が取得されないことです
Rush.2707

40

基本的に:

using System.Net;
using System.Net.Http;  // in LINQPad, also add a reference to System.Net.Http.dll

WebRequest req = HttpWebRequest.Create("http://google.com");
req.Method = "GET";

string source;
using (StreamReader reader = new StreamReader(req.GetResponse().GetResponseStream()))
{
    source = reader.ReadToEnd();
}

Console.WriteLine(source);

19

最新、最新、最新の回答
この投稿は本当に古い(私が回答した時点で7歳です)ので、他の回答のどれも、HttpClientクラスである新しい推奨される方法を使用していません。


HttpClient新しいAPIと見なされ、古いAPI(WebClientおよびWebRequest)を置き換える必要があります

string url = "page url";
HttpClient client = new HttpClient();
using (HttpResponseMessage response = client.GetAsync(url).Result)
{
   using (HttpContent content = response.Content)
   {
      string result = content.ReadAsStringAsync().Result;
   }
}

HttpClientクラスの使用方法の詳細(特に非同期の場合)については、この質問を参照してください


4
提案:非同期メソッドを待ちます。
Maarten

非同期/のawaitでこれを使用する方法を次のリンクのショーを@Maarten stackoverflow.com/questions/33020657/...
ハカンFıstık

17

あなたはそれを得ることができます:

var html = new System.Net.WebClient().DownloadString(siteUrl)

短くて甘い!Joe Albahariの例を読んだ後、あなたの提案を見つけました。LINQPad>ヘルプ>新着情報、およびキャッシュを検索します。
コリン

7
var html = new System.Net.WebClient()。DownloadString(siteUrl); //クライアントを新しくする必要があります!
user1328350 2014

9
DisposeWebClient
JD

11

@cms方法はより最近のものであり、MS Webサイトで提案されていますが、解決するのが難しい問題がありました。どちらの方法もここに投稿されているので、今や私はすべての人に解決策を投稿します!

問題: このようなURLを使用する場合場合www.somesite.it/?p=1500によっては内部サーバーエラー(500)が発生しますが、Webブラウザーではこれはwww.somesite.it/?p=1500完全に機能します。

解決策: パラメータを移動する必要があります。動作するコードは次のとおりです。

using System.Net;
//...
using (WebClient client = new WebClient ()) 
{
    client.QueryString.Add("p", "1500"); //add parameters
    string htmlCode = client.DownloadString("www.somesite.it");
    //...
}

ここ公式ドキュメント

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.