0

を初めて使用し、サイトからデータをクロールするためWeb Crawlingに を使用しています。HttpWebRequest

今のところ、WordPress サイトから正常にクロールしてデータを取得できました。このデータは単純なユーザー プロファイル データでした。(名前、電子メール、AIM ID など...)

ここで、演習としてウィキペディアをクロールします。最後にテキストボックスに入力された値を使用して検索し、検索値でウィキペディアをクロールして、検索から適切なタイトルを取得します。

今、私は次の疑問/困難を抱えています。

  • まず、これは可能ですか?ウィキにはこれをブロックするための robot.txt 設定があると聞きました。これは友人から聞いただけなので定かではありませんが。

  • 以前に使用したのと同じ手順を使用していますが、必要な結果が得られません。

ありがとう !

更新: @svick からの説明とヘルプの後、以下のコードを試しましたが、まだ値を取得できませんでした (コードの最後の行を参照してください。検索結果ページの html マークアップが期待されています)。

string searchUrl = "http://en.wikipedia.org/w/index.php?search=Wikipedia&title=Special%3ASearch";

var postData = new StringBuilder();
postData.Append("search=" + model.Query);
postData.Append("&");
postData.Append("title" + "Special:Search");

byte[] data2 = Crawler.GetEncodedData(postData.ToString());

var webRequest = (HttpWebRequest)WebRequest.Create(searchUrl);

webRequest.Method = "POST";
webRequest.UserAgent = "Crawling HW (http://yassershaikh.com/contact-me/)";
webRequest.AllowAutoRedirect = false;

ServicePointManager.Expect100Continue = false;

Stream requestStream = webRequest.GetRequestStream();
requestStream.Write(data2, 0, data2.Length);
requestStream.Close();

var responseCsv = (HttpWebResponse)webRequest.GetResponse();
Stream response = responseCsv.GetResponseStream();

// Todo Parsing
var streamReader = new StreamReader(response);
string val = streamReader.ReadToEnd();

// val is empty !! <-- this is my problem !

これが私のGetEncodedDataメソッド定義です。

public static byte[] GetEncodedData(string postData)
    {
        var encoding = new ASCIIEncoding();
        byte[] data = encoding.GetBytes(postData);
        return data;
    }

これについて私を助けてください。

4

1 に答える 1

2
  1. おそらく使用する必要はありませんHttpWebRequest。使用するWebClient(またはHttpClient.Net 4.5 を使用している場合) 方がはるかに簡単です。
  2. robots.txt実際には何もブロックしません。何かがそれをサポートしていない (そして .Net がそれをサポートしていない) 場合、それは何にでもアクセスできます。
  3. User-Agentウィキペディアは、ヘッダーが設定されていないリクエストをブロックします。また、連絡先情報には有益な User-Agent 文字列を使用する必要があります。
  4. ウィキペディアにアクセスするより良い方法は、スクレイピングではなくAPIを使用することです。このようにして、XML または JSON としてフォーマットされた、カスタム アプリケーションによって読み取られることを特に意図した回答が得られます。ウィキペディアからのすべての情報を含むダンプもダウンロードできます。

編集:新しく投稿されたコードの問題は、検索された記事が存在する場合、クエリが302 Moved Temporarily応答を返すことです。を禁止している行を削除するか、クエリにAllowAutoRedirect追加&fulltext=Searchしてください。これにより、リダイレクトされなくなります。

于 2012-08-23T15:04:59.643 に答える