2016-04-17 8 views

答えて

0

がつがつ食いますHTTPクライアントです。その結果、javascriptのコンテンツは解析または実行されません。要求されたエンドポイントの外にあるJavascriptファイルはダウンロードされません。

ご使用の環境によっては、PHPv8(Google V8 JavaScriptエンジンを組み込んだPHP拡張機能)とカスタムhandler/middlewareを利用することができます。

また、ご使用の環境によっては、javascriptクライアントで単純にスクレイピングを実行する方が簡単かもしれません。

-1

それはJavaScriptを使用して作業することは不可能であるので、私は別の解決策を提案することができます。要素を点検>

GOOGLE CHROME>右ボタンを>右ボタン>コピーしたHTMLをHTML>コピー>仕事

として編集
 $html = $the_copied_html; 
     $crawler = new Crawler($html); 

     $data = $crawler->filter('.your-selector')->each(function (Crawler $node, $i) { 
       return [ 
        'text' => $node->text() 
       ]; 
     }); 

     //Do whatever you want with the $data 
     return $data; //type Array 

これは、単一のジョブでのみ機能し、自動化されたプロセスでは機能しません。私の場合、これはそれを行います。

2

あなたはファントムを見てみたいです。このPHPの実装があります:

http://jonnnnyw.github.io/php-phantomjs/

あなたはそれが当然のPHPで作業している必要があります。

Guzzleが提供する素晴らしい機能(コンテンツの検索など)を使用するために、ページを読み込んでGuzzleにフィードすることができます。それは多分あなたは、単にこのように、DOMを使用することができ、あなたのニーズに依存する:

How to get element by class name?

ここではいくつかの作業コードがあります。ファントムを使用しての

$content = $this->getHeadlessReponse($url); 
    $this->crawler->addContent($this->getHeadlessReponse($url)); 

    /** 
    * Get response using a headless browser (phantom in this case). 
    * 
    * @param $url 
    * URL to fetch headless 
    * 
    * @return string 
    * Response. 
    */ 
public function getHeadlessReponse($url) { 
    // Fetch with phamtomjs 
    $phantomClient = PhantomClient::getInstance(); 
    // and feed into the crawler. 
    $request = $phantomClient->getMessageFactory()->createRequest($url, 'GET'); 

    /** 
    * @see JonnyW\PhantomJs\Http\Response 
    **/ 
    $response = $phantomClient->getMessageFactory()->createResponse(); 

    // Send the request 
    $phantomClient->send($request, $response); 

    if($response->getStatus() === 200) { 
     // Dump the requested page content 
     return $response->getContent(); 
    } 

} 

唯一の欠点は、それががつがつ食うよりも遅くなりますが、もちろん、あなたはすべてのそれらの厄介なJSをロードするのを待つ必要があります。

+0

また、$ response-> getStatus()もリダイレクトの場合に301と等しいかどうかをチェックするとよいでしょう。 – thisiskelvin

関連する問題