見出し画像

C#でプロキシ経由でスクレイピングするコード

C#でウェブサイトにアクセスして、文章をダウンロードする(スクレイピング)コードです。

に「プロキシを使う」という機能を加えました。

プロキシとはプロキシサーバのことです。
ウェブサイトにアクセスするとき、プロキシを中継することでアクセスのルートが変わります。

すると、直接のアクセスがうまくいかなかったウェブサイトのデータも、ダウンロードできたりするのです。
main()を目的によって変えたり、getSource()を自分のコードにコピペして使って下さい。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net; //追加してください。
using System.IO; //追加してください。

namespace getSource
{
   class Program
   {
       static void Main(string[] args)
       {
           string url = "https://baacash.com/scraping"; //ダウンロードしたいURL
           string source = ""; //結果を入れるハコ

           //プロキシを読み込む
           string proxy = ""; //プロキシを入れるハコ
           string proxyFn = "proxy.txt"; //プロキシを書き込むファイル名
           if (File.Exists(proxyFn))
           {
               //プロキシファイルが存在するなら中身をproxyに入れる
               StreamReader sr = new StreamReader(proxyFn);
               proxy = sr.ReadToEnd();
               sr.Close();
           }

           //ダウンロード
           if (getSource(url, ref source, proxy))
           {
               //ダウンロード成功したときの処理
               Console.WriteLine(source);
               Console.ReadKey(); //キー入力待ち
           }
           else
           {
               //ダウンロード失敗したときの処理
               Console.WriteLine("ダウンロードに失敗しました。");
               Console.ReadKey(); //キー入力待ち
           }
       }
       static bool getSource(string url, ref string source, string strProxy)
       {
           HttpWebRequest webreq = (HttpWebRequest)
           WebRequest.Create(url);
           try
           {
               //引数のプロキシに値が入っていたら設定
               if (strProxy != "")
               {
                   WebProxy proxy = new WebProxy(strProxy);
                   webreq.Proxy = proxy;
               }

               //ウェブサイトの内容をダウンロード
               HttpWebResponse webres = (HttpWebResponse)webreq.GetResponse();
               Stream st = webres.GetResponseStream();

               //ウェブサイトの内容をハコにいれる
               StreamReader sr = new StreamReader(st);
               source = sr.ReadToEnd();

               st.Close();
               sr.Close();
           }
           catch (WebException e)
           {
               Console.WriteLine(e.Message); //ダウンロードに失敗した場合、理由を表示
               Console.WriteLine("getSourceで例外が発生しました。\n" + url);
               return false;
           }
           return true;
       }
   }
}

main()

「プロキシを読み込む」機能を加えました。

プログラムのEXEファイルがあるフォルダから”proxy.txt”を探します。
あったらならその中身を読み込みます。

“proxy.txt”をあらかじめ作って、プロキシを書きこんでおきます。
古くなるとアクセスが遅くなったり、つながらなくなったりするため、新しいものを選びます。

“proxy.txt”の書きかたですが、改行はせずに以下のように書いてください。

スクリーンショット-2016-11-16-14.37.21-コピー

この状態でキーボードの、「↓」を押して、カーソルが移動しなければ改行はありません。

getSource(string url, ref string source, string strProxy)

第一引数、第二引数、返り値についてはコチラを見てください。
今回は第三引数(string strProxyのところ)を追加しました。

第三引数にはさっき読み込んだプロキシをいれます。
プロキシを使わないときはここに””(空の文字列)を入れればOKです。

この記事が気に入ったらサポートをしてみませんか?