前提・実現したいこと
PHPでスクレイピングをしています。アンテナサイトのフィードから配信元のurlを取得し、更にその配信元の記事で使用されている画像を取得しています。
htmlの構造が違うサイトでも確実に画像が取得できるようにしたいです。
発生している問題・エラーメッセージ
rssであればlinkやtitleといった値はどのサイトにも共通してありますが、DOMで値を指定するタグやidは各サイトによって名前が異なる場合があります。
対応できるようにするためには何が必要でしょうか。
該当のソースコード
PHP
1<?php 2 $rssdata = simplexml_load_file("http://2chnavi.net/headline/?rss=1"); 3 4 // 読み込み件数を決定する 5 $num_of_data = 5; 6 7 //出力内容の初期化 8 $outdata = ""; 9 10 11 //設定した読み込み件数分だけ取得を繰り返す 12 for ($i=0; $i<$num_of_data; $i++){ 13 $entry = $rssdata->channel->item[$i]; //記事1個取得 14 $date = date("Y/m/d", strtotime($entry->pubDate)); 15 $title = $entry->title; //タイトル取得 16 $link = $entry->link; //リンクURL取得 17 18 //出力内容に日付けを入れる 19 $outdata .= '<li><a href="' . $link . '" target="_blank">' ; 20 21 //出力内容にリンク付きでタイトルを入れる 22 $outdata .= '<span>' . $title . '</span></a>'.' '. $date .'</li>'; 23 24 25 require_once("phpQuery-onefile.php"); 26 $html = file_get_contents($link); 27 $doc = phpQuery::newDocument($html)->find("td")->find(".entry_title:eq(0)")->attr("href"); 28 29 30 $html3 = file_get_contents($doc); 31 32 if( parse_url($doc)['host']=="summary.livedoor.biz" ) $html3 = "<html>".$html3; 33 34 $html2 = phpQuery::newDocument($html3)->find("article")->find(".article-body")->find("img:eq(0)")->attr("src"); 35 36 37 $um .= '<li><img class="um" src="'. $html2 .'">'. '<p class="rt">'. $title . '</p>'; 38 } 39 40 echo'<ul class="io">' . $um . '</ul>'; 41 ?>
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/08/04 23:35