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”の書きかたですが、改行はせずに以下のように書いてください。
この状態でキーボードの、「↓」を押して、カーソルが移動しなければ改行はありません。
getSource(string url, ref string source, string strProxy)
第一引数、第二引数、返り値についてはコチラを見てください。
今回は第三引数(string strProxyのところ)を追加しました。
第三引数にはさっき読み込んだプロキシをいれます。
プロキシを使わないときはここに””(空の文字列)を入れればOKです。
この記事が気に入ったらサポートをしてみませんか?