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

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

ただいまの
回答率

90.35%

  • PHP

    25489questions

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

  • CSS

    8359questions

    CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

  • Symfony2

    124questions

    Symphony2は、簡単で速く堅牢なプログラムの開発サイクルに焦点を当てた、オープンソースのPHPウェブアプリケーション開発フレームワークです。PHP version 5.3.3以上を対象としています。

htmlファイルのパスをURLにしてGoutteでクローリングすると値が取れない

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,027

Pccla

score 31

(追記:仮想環境)
CentOS7
Vagrant 1.8.1

使っている環境
php 5.6
symfony 2.2
goutte 3.1

上記環境でクローラーを作っています。
最初は何度も実行をするから、クローリングするサイトへ負荷がかかるだろうと思い、
サイトトップページのhtmlを丸々コピーして仮想環境で作業しています。

ところが、そのhtmlファイルのパスをURLとして、
トップページの情報をvar_dumpしてみたところテキストなどの値が何も取れておりませんでした。

試しにファイルのパスではなく、実際にクローリングしたいサイトのURLで実行してみると
テキストなどの値が取れました。

require_once "/var/www/html/crawler/vendor/autoload.php";

use Symfony\Component\DomCrawler\Crawler;
use Goutte\Client;


$cli = new Client();
// 仮想環境に設置したhtmlファイルのパスををurlにしてクローリングすると $crawler に値が入ってこない。
$url = "http://user.com/crawler/top.html";

    // 実際に値を取得したいサイトのURLをurlにすると $crawler に値が入ってきた。
    // $url = "http://www.××××××.co.jp";

// ここでvar_dumpすると上記の違いが出てくる。
$crawler = new Crawler($url);

// サイトトップページの情報をリクエスト
$crawler = $cli->request("GET", $url);
var_dump($crawler);

なぜhtmlファイルのパスだと値が取れないのかお分かりになる方がいらっしゃいましたら
教えていただけますと幸いです。goutteを使っての解決方法でお願いします。
どうぞよろしくお願いします。

確認したこと
・ファイルのパスは間違っていないか。
・htmlファイルの中身がちゃんと入っているか。
・var_dumpした時に下記を見て値が取れていないと判断しました。

["textContent"]=>
    string(1221) "
function getCookie(c_name) { // Local function for getting a cookie value
    if (document.cookie.length > 0) {
        c_start = document.cookie.indexOf(c_name + "=");
        if (c_start!=-1) {
        c_start=c_start + c_name.length + 1;
        c_end=document.cookie.indexOf(";", c_start);

        if (c_end==-1) 
            c_end = document.cookie.length;

        return unescape(document.cookie.substring(c_start,c_end));
        }
    }
    return "";
}
function setCookie(c_name, value, expiredays) { // Local function for setting a value of a cookie
    var exdate = new Date();
    exdate.setDate(exdate.getDate()+expiredays);
    document.cookie = c_name + "=" + escape(value) + ((expiredays==null) ? "" : ";expires=" + exdate.toGMTString()) + ";path=/";
}
function getHostUri() {
    var loc = document.location;
    return loc.toString();
}
setCookie('××××××××××', '×××.×××.×××.×××', ××);
try {  
    location.reload(true);  
} catch (err1) {  
    try {  
        location.reload();  
    } catch (err2) {  
        location.href = getHostUri();  
    }  
}
This site requires JavaScript and Cookies to be enabled. Please change your browser settings or upgrade your browser."
  }
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+1

ありそうなのは仮想環境のhostsにuser.com 127.0.0.1が設定されてないのかなーと思いますが、情報が少ないのでひとまず

$cli->getInternalResponse()->getStatus();


で返ってくるHTTPステータスコードを確認してみはどうでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/06/19 17:55

    回答ありがとうございます。
    HTTPアクセスコードを確認したところ「int(200)」が帰ってきました。
    が、そこからどうしたらいいのかわからずまた悩んでおります、、

    > 仮想環境のhostsにuser.com 127.0.0.1が設定されてない

    こちらは /etc/httpd/conf/httpd.conf に書き込む情報か何かでしょうか??
    初歩的なところで詰まってしまい申し訳ないのですがご教示いただけますと幸いです!

    キャンセル

  • 2016/06/19 19:02

    おっしゃった通り、hostの設定がされていなかったことが原因で
    仮想環境に設置したhtmlファイルを読み込めていませんでした。
    ありがとうございました!!

    キャンセル

0

URLしか違いがなく、情報が取れないのなら、URLが間違っているのだと思います。
cURL等でちゃんと情報が入手できるか確認されては?

ファイルのパスって書き方が、そのままの意味なのであれば、それが間違いです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/06/19 17:49

    回答ありがとうございます。また、書き方が悪く申し訳ありません。
    ファイルパスそのままを記述しているわけではなく、
    開発環境でアクセスできるURLを記述しております。

    HTTPステータスコードを確認したところ「int(200)」が帰ってきてまして、そこからまた悩んでおります。

    キャンセル

0

hide2e3rさんのおっしゃった通り、hostsに user.com 127.0.0.1 と設定したら解決しました。
(192.168.××~としても問題なく表示されるんですね〜、、ここらへんはまだまだ勉強が必要なようです。)

仮想環境のhostsにuser.com 127.0.0.1が設定されてない

お手数をおかけいたしました。お二人とも貴重なお時間ありがとうござました!

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • PHP

    25489questions

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

  • CSS

    8359questions

    CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

  • Symfony2

    124questions

    Symphony2は、簡単で速く堅牢なプログラムの開発サイクルに焦点を当てた、オープンソースのPHPウェブアプリケーション開発フレームワークです。PHP version 5.3.3以上を対象としています。