![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
phpのgoutteを使用して、
下記htmlのスクレイピング結果をDBに格納したいと考えています。
li部分が繰り返し部分後なっております。
■htmlのスクレイピング部分
<ul id="test">
<li class="clearfix">
<div class="thumbox">
<a href="http://xxxx.co.jp" target="_blank"">
<img src="http://xxx.co.jp/01.jpg" alt="01" class="thumb">
</a>
</div>
<h4>
みだし
</h4>
<p>
文章
</p>
</li>
<li>
上記liと同じで、繰り返し。(画像ファイル、文章等は異なります。)
</li>
</ul>
phpソースは、下記部分になります。
■スクレイピングphpソース
$crawler->filter('ul#test a')->each(function($element)
{
var_dump($element->attr('href'));
});
現状のphpソースでは、filter('ul#test a')のため、
aタグのhrefの内容しか抜き取れていません。
やりたいこととしては、
1.aタグのhref値
2.imgのsrc値
3.aタグの後のhタグの見出し
4.pタグの文章を抜く
上記4つを一回で抜き出し、後はli部分をぐるぐる回して、1~4の値を抜きたいのです。
最終的には、
・抜いた4つの値をDBに1行のレコードとして格納。
・残りのli部分も同じように繰り返す。
といったことをやりたいので、
$crawler->filter('タグ書き方)->each(function($element)
{
変数1 = 1.aタグのhref値
変数2 = 2.imgのsrc値
変数3 = 3.aタグの後のhタグの見出し
変数4 = 4.pタグの文章を抜く
DBにIns(変数1,変数2,変数3,変数4)
});
と一回の関数の中で、4つの値を取り出し、DBに放り込みたいのです。
現状、私が記述しているfilter条件では、aタグしか取り出せないのです。
どのようにソースを修正すれば、対応できるのかわかりません。
良い知恵をお持ちの方がいらっしゃいまいたら、
ご教授お願いいたします。
No.1ベストアンサー
- 回答日時:
各要素がfilterメソッドを所持しているようなので更なる絞込みは容易です。
$client = new Goutte\Client;
$crawler = $client->request('GET', 'http://example.com');
$crawler->filter('ul#test>li')->each(function ($e) {
var_dump(array(
$e->filter('a')->attr('href'),
$e->filter('img')->attr('src'),
trim($e->filter('h4')->text()),
trim($e->filter('p')->text()),
));
});
ちなみにこの程度のシンプルなスクレイピングであればPHPの標準クラスだけでも容易に実現出来ます。コード量も大差無いです。
$dom = new \DOMDocument;
@$dom->loadHTMLFile('http://example.com');
$xpath = new \DOMXPath($dom);
foreach ($xpath->query('//ul[@id="test"]/li') as $e) {
var_dump(array(
$xpath->evaluate('string(.//a/@href)', $e),
$xpath->evaluate('string(.//img/@src)', $e),
$xpath->evaluate('normalize-space(.//h4)', $e),
$xpath->evaluate('normalize-space(.//p)', $e),
));
}
備考: http://qiita.com/mpyw/items/c0312271819baee09132
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
htmlのソースからテーブルの値...
-
URLの結合
-
「ブログのコメント欄にリンク...
-
preg_match と正規表現 で URL抽出
-
VBAのコマンドボタンの文字列の...
-
ソースコードの1行が長いとき...
-
メッセージボックスで1025文字...
-
文字の入力で横バー上段、中断...
-
記号は半角と全角どちらがよい...
-
テキストファイルから改行コー...
-
ダブルコーテーション(
-
、"(ダブルクォーテーション)...
-
エスケープ文字の復帰(¥r)と...
-
COBOLの改行
-
全角括弧と全角読点の間隔を狭...
-
C++で空Enterの入力を判...
-
ファイルから読み取った改行文...
-
ファイル内の1行(レコード)から...
-
バッチファイル 全角検索
-
数値をASCII文字にする方法につ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
正規表現でタグの置換をしたい...
-
htmlのソースからテーブルの値...
-
正規表現で複数行に渡る範囲を...
-
phpでhtmlのタイトルを取得する...
-
PHPの正規表現でHTMLタグの内容...
-
reuterの記事をbeautiful.soup....
-
横1行に2種類の画像を交互に5...
-
変数にHTMLを代入する場合
-
タグにはさまれている文字以外...
-
phpの正規表現でstyle="●●"を削...
-
JSFタグのfタグとは
-
Nvuで作成したhtmlをコピペして...
-
URLの結合
-
「ブログのコメント欄にリンク...
-
preg_match と正規表現 で URL抽出
-
WordPressのhtmlエディタについて
-
PHPスクレイピングが上手くいき...
-
正規表現でHTMLタグの属性まで...
-
VBSでのhtmlタグ要素名の置換
-
文字列を順番に置換
おすすめ情報