Drupal で作成された Web サイトからコンテンツを取得したいと考えています。ここでの課題は、スクレイピングしたいページにアクセスする前に、このサイトにログインする必要があることです。セキュリティで保護されたコンテンツを取得できるように、C# コードでこのログイン プロセスを自動化する方法はありますか?
2 に答える
保護されたコンテンツにアクセスするには、ログイン情報を送信するリクエストから始めて、サーバーから提供されたセッションCookieを保存することで、サーバーへのリクエストごとにCookieを保存して送信する必要があります(これは、あなたが言う人です)。
を使用するSystem.Windows.Forms.WebBrowser
と、制御が弱くなりますが、Cookieを処理するすぐに使用できるソリューションになります。
私が好む方法は、を使用System.Net.HttpWebRequest
してすべてのWebデータを送受信し、HtmlAgilityPackを使用して、返されたデータを解析して、簡単に読み取れるドキュメントオブジェクトモデル(DOM)にすることです。
仕事に取り掛かる秘訣は、ログイン情報(およびサーバーが追跡することを期待するその他のもの)を追跡System.Net.HttpWebRequest
する長寿命のものを作成する必要があることです。System.Net.CookieContainer
良いニュースはHttpWebRequest
、コンテナを提供すれば、がこれらすべてを処理してくれることです。
HttpWebRequest
呼び出すたびに新しいものが必要になるため、.CookieContainer
毎回同じオブジェクトに設定する必要があります。次に例を示します。
未テスト
using System.Net;
public void TestConnect()
{
CookieContainer cookieJar = new CookieContainer();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.mysite.com/login.htm");
request.CookieContainer = cookieJar;
HttpWebResponse response = (HttpWebResponse) request.GetResponse();
// do page parsing and request setting here
request = (HttpWebRequest)WebRequest.Create("http://www.mysite.com/submit_login.htm");
// add specific page parameters here
request.CookeContainer = cookieJar;
response = (HttpWebResponse) request.GetResponse();
request = (HttpWebRequest)WebRequest.Create("http://www.mysite.com/secured_page.htm");
request.CookeContainer = cookieJar;
// this will now work since you have saved your authentication cookies in 'cookieJar'
response = (HttpWebResponse) request.GetResponse();
}
http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.aspx
http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.cookiecontainer.aspx
これを行うには、 Servicesモジュールを使用する必要があります。ちょっとした説明については、このリンクもチェックしてください。