前回は検索結果を取得するためにHttpWebRequestクラスやHttpWebResponseクラスを使用しました。そしてこの場合は通常の検索結果が返されるのではなく簡易版検索結果ページが返されました。

https://search.yahoo.co.jp/legacy/help.htmlによると

セキュリティーアップグレードなどのアップグレードが終了しているブラウザ
CSS(カスケーディング・スタイル・シート)に対応していないブラウザ
CSSに対応しているが、Yahoo!検索の標準の検索結果ページをレイアウトするのに必要なCSSの対応が行われていないブラウザ
携帯端末に組み込まれたブラウザ・携帯端末向けブラウザ

の場合は簡易版検索結果ページが返されます。

そこで今回はWebBrowserコントロールをつかって検索結果を取得します。WebBrowserコントロールを使う場合、ScriptErrorsSuppressedプロパティをtrueにしておかないとスクリプトエラーを知らせるダイアログが何度も表示されます。

WebBrowserは表示される必要はないので webBrowser1.Visible = false;にしています。

コントロールでドキュメントの読み込みが完了したらDocumentCompletedイベントが発生するので、そのときに処理ができるようにしておきます。

HTMLコンテンツを取得することができたら、これを利用して検索結果を解析します。

まず上位10サイトのタイトルとurlを調べるメソッドを示します。

検索結果が表示されている部分は

となっています。

必要なのは

のつぎにあるurlとアンカーテキストだけです。

そこでclass = “sw-Card__title”の要素をすべて取得して、そのなかからさらにaタグの要素を最初のひとつだけ取得します。そしてその要素をInnerHtmlプロパティをつかってみてみると

このようになっています。

そこで必要なのは class = “sw-Card__titleMain”の要素なので

とやって取得します。

またYahoo知恵袋やNAVERまとめブログなどのurlが3個くらいまとまって出てくることもあります。このときは class = “sw-Card__titleMain” はないので、aタグのアンカーテキストをそのまま取得しています。

次に虫眼鏡ワードを取得するメソッドを示します。

Htmlを見ると虫眼鏡ワードの部分はこのようになっています。

そこで class = “Unit__listItem”の要素をすべて取得して、それらのなかから aタグの要素をひとつだけ取得します。また虫眼鏡ワードは検索結果の上部と下部に表示されます。同じものは取り除いています。

WebBrowserコントロールでドキュメントの読み込みが完了したら