質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

解決済

1回答

2958閲覧

[C#]WebClientでGoogle検索結果のページを取得したがブラウザで見た時とHTMLが違う

kurosuke___

総合スコア217

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

0クリップ

投稿2016/10/20 16:52

編集2016/10/20 17:49

WebClientのOpenReadで「https://www.google.co.jp/search?q={URIエンコードした文字}」のURLのページを取得し、HtmlAgilityPackで取得したのですが、取得したhtmlソースとブラウザ(Chrome)でみたhtmlソースが違っています。
ブラウザで見た時と同じソースを取得したいのですが、方法はありますでしょうか。

C#

1 HtmlAgilityPack.HtmlDocument html = new HtmlAgilityPack.HtmlDocument(); 2 using (WebClient wc = new WebClient()) 3 using (Stream s = wc.OpenRead(url)) 4 using (StreamReader sr = new StreamReader(s, Encoding.GetEncoding("utf-8"))) 5 { 6 html.Load(sr); 7 } 8 HtmlNodeCollection hs = html.DocumentNode.SelectNodes(@"//div[@class=""g""]/div"); 9 10 foreach (var item in hs) 11 { 12 Console.WriteLine(item.InnerHtml); 13 }

ブラウザで確認したソースは↓(aタグのところのみ)

html

1<a href="https://www.searchdesk.com/" onmousedown="return rwt(this,'','','','1','AFQjCNFA9FR66X7Xevi6lEK0FZWsOcbpzg','','0ahUKEwivgvqF6OnPAhVmilQKHWz9Ak4QFgggMAA','','',event)">検索デスク - SearchDesk - スタートページ</a>

実際に取得したソース↓

html

1<a class="_Zkb" href="/url?q=http://webcache.googleusercontent.com/search%3Fq%3Dcache:svz7MjKndB4J:https://www.searchdesk.com/%252B%25E6%25A4%259C%25E7%25B4%25A2%26num%3D1%26hl%3Dja%26ct%3Dclnk&amp;sa=U&amp;ved=0ahUKEwjo-b-V6unPAhUKxFQKHYFOCd0QIAgXMAA&amp;usg=AFQjCNE5T0HGmzkgFXgoVRJk33YwCqRNCA">�L���b�V��</a>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

クライアントスクリプトで最終的な内容に書き換えるページで、その最終結果を WebClient で取得するのはできないのではないですか?

Google Custom Search API というのがあるそうですので、それを使うことを検討されてはいかがでしょう?

投稿2016/10/21 00:28

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kurosuke___

2016/10/21 04:02

回答ありがとうございます。 なるほど・・・リクエストをどうにか違ったものにすれば取得できるのでしょうかね・・・ そのAPIを使おうと思ったのですが、料金の発生しない範囲ですと、リクエスト回数の制限が少し少なすぎたのでどうにかできないものかと思ったのですが、この際仕方ないですね。 ありがとうございました。
退会済みユーザー

退会済みユーザー

2016/10/21 04:39

WebClient でスクリプトが動かない限り(動かないはずですが)何ともならないかと
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問