プロジェクト用のカスタムスクレーパーを構築しています。現在、Web ページ上のすべてのリンクをスクレイピングし、HREF とアンカー テキストをデータベースに保存できます。ただし、アンカー要素に画像要素が含まれているかどうかを判断しようとすると、行き詰まります。
これが私のコードです:
foreach($rows as $row) {
$url = $row['url'];
$dom = new DOMDocument;
libxml_use_internal_errors(TRUE); //disable libxml errors
$dom->loadHTML(file_get_contents($url));
// Write source page, destination URL and anchor text to the database
foreach($dom->getElementsByTagName('a') as $link) {
$href = $link->getAttribute('href');
$anchor = $link->nodeValue;
$img = $link->getElementsByTagName('img');
$imgalt = $img->getAttribute('alt');
次に、データをデータベースに書き込みます。これは $img と $imgalt 内で正常に機能しますが、アンカーに画像が含まれているかどうか、および alt 属性があるかどうかを本当に識別したいと考えています。問題は、getElementsByTagName を使用して画像を選択しようとしている方法であることを知っています。私は一日中グーグルでさまざまな提案を試みましたが、何もうまくいかないようです。これは可能ですか?
ここに記載されている指示に従いました。
いくつかの進歩があります。アンカー要素内の画像の HTML をエコーできます (単に の場合echo
DOMinnerHTML($link)
) が、それでも alt 属性を取得できません。getAttribute()
「非オブジェクトのメンバー関数への呼び出し」を取得し続けます。
ここに私のコードがあります:
foreach($dom->getElementsByTagName('a') as $link) {
$href = $link->getAttribute('href');
$anchor = $link->nodeValue;
$imgdom = DOMinnerHTML($link);
$imgalt = $imgdom->getAttribute('alt');
if(isset($imgalt)){
echo $imgalt;
}