2009-03-10 4 views
1

PHPで次々とウェブページを解析しようとしていますが、最初のページを開くと、次のページへのリンクがjavascriptで隠されていることに気付きました。どのようにPHPで隠されたJavaScriptのリンクを解決しますか?

私は次のウェブページを解析することができますか? urlに "page = 2"のような変数があれば、私はそのように行きますが、urlは暗号化されています。

-LPG

答えて

0

唯一の方法は、javascriptのリンクを解析し、それらを次の正規表現を記述することです。ページへのURLがjavascriptのコード、例えばにあった場合、これはおそらく唯一の仕事になります。

<a href="javascript:open('something/some_page.html');">Something</a> 

だけではなく、

<a href="javascript:open(someField.value);">Something</a> 

の第二の例で、あなたは実際にはJavaScriptを処理しなければならないのでPHPを使用してリンクすることは非常に困難です。

各サイトでURLのフォーマットが異なるため、ウェブサイト固有の正規表現を作成する必要があることにも注意してください。だから、Cnn.comが異なっReddit.com

1

よりもそのURLをフォーマットするかもしれない基本的に次の2つの選択肢を持っている:

  1. そのロジックをエミュレートしますが、#と一緒に行きたい場合は有効なクライアント

をエミュレート1あなたはJavascriptコードを読んで、それがどのように動作するかを理解する必要があります。私は実際にはそれがコードに大きく依存するので、それ以上にはそれを説明できません。あなたはちょうどJavascriptとそのコードを "grok"知る必要があります。次に、コードを同じロジックで実行して、「次のページ」のURLを生成します。

自分のシステムでAJAXを使用している場合でも、それをエミュレートすることはできます(クリックアップの言葉とは異なります)。これを行うにはFirebug Firefox拡張機能のようなツールを使うだけで、あなたのブラウザがサーバーの裏側に何を送っているのかを見ることができます。次に、コードがAJAXリクエストを模倣した偽のHTTPリクエストを送信するようにします。実際には、Firebugのようなツールを使わなくても、これを行うことができます.Javascriptコードを見て、ブラウザが送信する内容を推測するだけです。しかし、あなたがFirebugのようなものを使うと、物事をもっと簡単にするでしょう(推測するのではなく、送信されているものだけを見ることができます)。

代わりに#1を使用する場合は、実際のブラウザを使用して(そして、プログラムでSeleniumなどを使用して制御する)、またはRhinoのようなものを使用してJavascriptを実行する必要があります。 Seleniumのような制御システムを備えた実際のブラウザを使うのがおそらく最も簡単な方法です。ただし、ブラウザがページをレンダリングするのにかかる時間が限られているため、速度が遅くなります。 Rhinoなどを使用したソリューションは高速になりますが、HTMLを解析し、関連するすべてのJSファイルを含めるなどの作業が必要になりますので、最後の手段。

関連する問題