![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
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で質問しましょう!
似たような質問が見つかりました
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
- HTML・CSS FC2カートのテンプレートでの商品表示について 1 2023/03/02 18:05
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
- HTML・CSS htmlについて質問です! 写真のように写真の部分が?になってしまいます。 ファイルもしっかり選べて 1 2023/07/09 21:17
- Perl RSSにdiv,ul classを付けたいのですがどのようにつけるのかわからないです 2 2022/03/28 01:53
- PHP アコーディオンPHPが上手くいかない 3 2022/07/15 16:29
- HTML・CSS テキストを画面の真ん中に配置したいです。 2 2022/11/25 16:11
- その他(プログラミング・Web制作) pythonのWebスクレイピングでfind_allだとurlがNoneに 4 2022/04/17 18:21
- HTML・CSS HTML & CSS 縦ボックス内の文字の左右センタリング 3 2023/03/25 04:23
- HTML・CSS HTMLのdlとul どちらが正しいと思いますか 3 2023/02/23 11:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
[php][正規表現]タグ以外を削除...
-
htmlのソースからテーブルの値...
-
htmlspecialchars関数を使いな...
-
Aタグってなんですか?
-
こんにちは。PHPとMySQLで自作...
-
VBAのコマンドボタンの文字列の...
-
ソースコードの1行が長いとき...
-
文字の入力で横バー上段、中断...
-
COBOLの改行
-
エスケープ文字の復帰(¥r)と...
-
改行コード(CR/LF)の設...
-
全角括弧と全角読点の間隔を狭...
-
ダブルコーテーション(
-
C++で空Enterの入力を判...
-
○分から○時間○分に変換
-
カンマの含まれる文字列の数値...
-
エクセルのCOUNTIFが正しくカウ...
-
メッセージボックスで1025文字...
-
コンボボックスの項目中に改行を
-
textarea , PHP, 確認画面 改行
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
[php][正規表現]タグ以外を削除...
-
正規表現で複数行に渡る範囲を...
-
変数にHTMLを代入する場合
-
phpの正規表現でstyle="●●"を削...
-
正規表現でタグの置換をしたい...
-
コメントタグに挟まれた部分を...
-
Nvuで作成したhtmlをコピペして...
-
タグにはさまれている文字以外...
-
htmlタグ間の特定文字置換
-
htmlのソースからテーブルの値...
-
スクレイピングの仕方
-
Java正規表現-"ある文字列"を含...
-
JSFタグのfタグとは
-
htmlソースの中を検索して、
-
PHP 取得した経過時間の表示に...
-
eclipseより、タスク・タグの使...
-
タグとクッキーって関係あるん...
-
srcに「banner.」で始まるファ...
-
htmlspecialchars関数を使いな...
-
アクセス解析データがでません...
おすすめ情報