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

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

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

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

8731閲覧

ブラウザでのアクセスとcurlの検索結果の違い

msx2

総合スコア174

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/02/18 15:26

PHPでcurlを使って楽天市場の検索結果を取得しています。

普通にブラウザを使って検索を行い、アドレスバーに表示されたurlをコピーしcurlを使ってアクセスしました。
2つの検索結果を見比べたところ表示される順位にかなりの違いがあります。

Getによるアクセスなので送信されている情報は同じだと思います、ユーザーエージェントも同じ値を設定しています。Chromeをシークレットモードで起動し楽天市場のトップページを表示せずに直接検索クエリを実行しても同じにはなりません。

一体この2つは何が違って検索結果が異なっているのでしょうか?

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

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

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

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

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

guest

回答2

0

ベストアンサー

A:「普通にブラウザを使って検索」(この結果アドレスバーに表示された URL を [URL A] とする)
B:「curlを使って [URL A] にアクセス」
C: 「Chromeをシークレットモードで起動し直接検索クエリを実行」

C でアドレスバーに入力しているのは [URL A] ではなくて、検索クエリの URL ([URL 0] とする)で、A では検索実行時に [URL 0] をリクエストして、結果的な表示は [URL A] になった、ということでしょうか。
で、結果は B と C が一緒で、A とは違う、ということでよいでしょうか。

A のときにどういう操作を経ているのかわかりませんが、普通にブラウザ捜査しているとすると、cookie も送られている可能性が高いですよね。B では明示的に cookie を送る設定にしないと送らないですよね。C も cookie 送らないですよね。

外していたらすみません。
必要があったら HTTP 通信をキャプってみるといいんじゃないでしょうか。

投稿2016/02/18 21:42

unau

総合スコア2468

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

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

msx2

2016/02/19 00:11

ありがとうございます。 上記のCもアドレスバーに入力しているのは[URL A]です。 結果はAとCが同じでBだけ異なります。 2ページ目以降は純粋にリンクをクリックして表示させているので、このURLをブラウザに貼りつけたら同じ結果になりそうなものですが、これも上と同じ結果です。BとCは同じになって欲しいのですが…。
unau

2016/02/19 05:49

「純粋にリンクをクリックして」とありますが、クリックイベントのハンドラで POST で submit しているかもしれませんよね。 繰り返しになりますが、HTTP のリクエストとレスポンスを、ヘッダも含めてキャプってみるといいと思います。 あと、もし、キャプって何かわかったとしても、リクエストヘッダの内容の違いで検索結果順位が違ったとして、それが問題になるようならば、undocumented なふるまいに依存した設計自体が間違っていると考えたほうがいいかもしれません。もし、特定のリクエストヘッダの値によって望みの結果が得られるようになったとしても、いつまでそれが使えるかわからないわけですから。
msx2

2016/02/19 10:48

リクエストヘッダーを確認するとトップページを経由すると何かしらのクッキーを送信しているので影響があるのかもしれませんね。ブラウザの履歴を全消去してから検索するとcurlと"ほぼ"同じ結果になりました。 楽天の商品検索は常にいろんな影響を受けてその結果(順位)は安定しないと考えることにしました。 順位に多少の前後はあっても大きく変わっていなかったので、ブラウザの検索結果もcurlからの検索結果もどちらも正しい結果なのだと思います。ありがとうございました。
guest

0

ブラウザのソース表示じゃなくて、ブラウザ画面と比べているのなら、JavaScriptのせいだと思います。

投稿2016/02/18 15:38

otn

総合スコア84555

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

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

msx2

2016/02/18 15:41

早速の回答ありがとうございます。 ソースは見比べずにブラウザの表示で見ています。 楽天はJavascriptで見た目の順番を入れ替えているのですか??
otn

2016/02/18 23:02

JavaScriptというのは一般論です。 順番というと、他の方が書いているように、Cookieでユーザーの履歴が参照されているのかもしれませんね。
msx2

2016/02/19 10:52

コメントありがとうございます。 ソースと画面の表示は同じだったのでJavascriptではないかも知れません。 ただし広告で検索結果に差し込まれている商品のショップ名やurlはブラウザ表示とは異なる記号で表されていました。こういうのがJavascriptでさわっている場所なんですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問