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

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

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

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

そこで今回はWebBrowserコントロールをつかって検索結果を取得します。

いつの間にか仕様変更されてWebBrowserコントロールをつかっても取得されるのは簡易版検索結果ページです。そのため前回のページと同じ処理をすることになります。

WebBrowserコントロールを使う場合、ScriptErrorsSuppressedプロパティをtrueにしておかないとスクリプトエラーを知らせるダイアログが何度も表示されます。

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

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

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

まず上位10サイトのタイトルとurlを調べる方法ですが、検索結果が表示されている部分は

以下はPCで普通に検索した場合の結果です。簡易版検索結果ページとは異なります。

となっています。

必要なのは

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

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

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

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

とやって取得します。

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

上記の方法は使えません。前回の方法と同じ方法でないと結果を取得することはできません。

次に虫眼鏡ワードを取得する方法ですが、Htmlを見ると虫眼鏡ワードの部分はこのようになっています。

以下はPCで普通に検索した場合の結果です。簡易版検索結果ページとは異なります。

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

上記の方法は使えません。前回の方法と同じ方法でないと結果を取得することはできません。

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