![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
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ランキング
-
変数にHTMLを代入する場合
-
[php][正規表現]タグ以外を削除...
-
eclipseより、タスク・タグの使...
-
PHPの正規表現でHTMLタグの内容...
-
オリジナルタグをHTMLタグに置...
-
str_get_htmlがこける原因を知...
-
VBSでのhtmlタグ要素名の置換
-
phpの正規表現でstyle="●●"を削...
-
htmlでflashを開く、画面サイズ...
-
正規表現で複数行に渡る範囲を...
-
正規表現でタグの置換をしたい...
-
VBAのコマンドボタンの文字列の...
-
エスケープ文字の復帰(¥r)と...
-
メッセージボックスで1025文字...
-
ソースコードの1行が長いとき...
-
文字の入力で横バー上段、中断...
-
文字列の括弧について(初心者)
-
エクセルVBA 文字列領域が不足...
-
全角括弧と全角読点の間隔を狭...
-
C++でのCRLFについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
reuterの記事をbeautiful.soup....
-
変数にHTMLを代入する場合
-
Nvuで作成したhtmlをコピペして...
-
srcに「banner.」で始まるファ...
-
[php][正規表現]タグ以外を削除...
-
PHPの正規表現でHTMLタグの内容...
-
htmlでflashを開く、画面サイズ...
-
csobjというタグについて
-
正規表現でHTMLタグの属性まで...
-
正規表現でタグの置換をしたい...
-
HTMLファイルの書き換え
-
★PHP★フォーム登録時にタグを読...
-
PHP4→5にアップグレードしたら...
-
オリジナルタグをHTMLタグに置...
-
print "<img src=\\"0.jpg\\/>\...
-
Strutsでリンクを動的に生成したい
-
正規表現で複数行に渡る範囲を...
-
PHP Webページのタイトルを取得...
-
リッチテキストエディターでの...
-
MP3のコメントタグやSYLTの詳細
おすすめ情報