ユーザーエージェントを偽装してWebスクレイピングをする
Webサイトから自動的に情報を抽出する「Webスクレイピング」ですが、IEやChrome、FireFoxなどの「ユーザーエージェント」を設定しないとサーバーから拒否されてURLにアクセスできない場合があります。Webスクレイピングのコードが既にある方は、一行のコードを変更する事でユーザーエージェントを偽装してWebスクレイピングをする事が可能となります。
Webスクレイピングのサンプルコード
WebスクレイピングのサンプルコードはDelphiという言語で使用できる関数にしました。C言語や.NET FrameworkやJavaなどでも手法は同様です。適宜、変更して下さいね。
// HTMLを取得する function getHTML(url:String):String; var hWinInet,hUrl :HINTERNET ; Buffer : Array[0..1023] of Char; ReadCount,Filesize : DWORD; p : Pointer; Mem : TMemoryStream; html: String; begin html := ''; filesize :=0; Mem := TMemoryStream.Create; // WinInet関数のアプリケーションの使用を初期化 // ※ユーザーエージェントはIE11 Windows7(64bit) hWinInet :=InternetOpen('Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); try if Assigned(hWinInet) then begin // FTPまたはHTTPのURLに接続 hUrl :=InternetOpenUrl(hWinInet,PChar(url), nil, 0,INTERNET_FLAG_RELOAD, 0); try if Assigned(hUrl) then begin while true do begin // 指定バイト数づつファイルを読み込む InternetReadFile(hUrl, @Buffer, Sizeof(Buffer), ReadCount); // ファイルの終端でループを抜ける if ReadCount = 0 then Break; // 読み込んだファイル情報の格納 Filesize := Filesize + ReadCount; Mem.Write(Buffer,ReadCount); end; if (Mem.size<>0) then begin GetMem(p,Filesize); try Mem.Position:=0; Mem.ReadBuffer(p^,Filesize); // UTF8をSjisに変換 // html :=Utf8NToSjis(pchar(p)) ; html := pchar(p); finally FreeMem(p); end; end; end; finally InternetCloseHandle(hUrl); end; end; finally InternetCloseHandle(hWinInet); Mem.Free; end; Result := html; end;
[使用例]
procedure TForm1.Button1Click(Sender: TObject); begin Memo1.text := getHTML('URLを記述'); end;
[実行例]
ユーザーエージェントを偽装する
本題のユーザーエージェントを偽装する部分ですが、InternetOpenの第一引数に任意の「ユーザーエージェント」を指定します。
サンプルでは「Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko」が記述されていますが、これは「IE11、Windows7 64bit」との意味となります。
一般的なユーザーエージェントは次の通りです。
Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240
Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko
Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko
Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
以上となります。
注意事項
Webスクレイピングは対象サイトの利用規約やrobots.txt、または関連法律などを遵守して各自の責任において実行するようにして下さい。この記事の執筆者及び運営者は一切の責任を負いませんのでご了承ください。
参考サイト
Webスクレイピングの注意事項一覧
Webスクレイピングのノウハウを公開します(PHP用)