使用PHP中的某个类名返回每个div

时间:2016-09-04 12:32:32

标签: php html

好的,所以我有一个页面上有图像,我想要抓取并返回以下信息:

  • 基本图片网址(“website.com/imagepage”)
  • 图片网址(“website.com/image.png”)
  • 如果有图像引号(“哇,漂亮的图像”)

我有工作要返回一张图片,但是我需要它来返回所有这些(大概有5张)

这就是我现在所拥有的:

function getMostRecentScreenshot($url) {
 $content = file_get_contents($url);

 $first_step = explode('<div class="imageWall5Floaters">' , $content );
 $second_step = explode('<div style="clear: left;"></div>' , $first_step[1] );

 return $second_step[0];
}

这是它返回的内容

<div class="floatHelp">
<a href="websiteurl.com/imagepage" onclick="return OnScreenshotClicked(9384938);" class="profile_media_item modalContentLink  " data-desired-aspect="1.77777777778">
    <div style="background-image: url('website.com/image');" class="imgWallItem  " id="imgWallItem_757249198">
        <div style="position: relative;">
            <input type="checkbox" style="position: absolute; display: none;" name="screenshots[9384938]" class="screenshot_checkbox" id="screenshot_checkbox_9384938" />
        </div>
        <div class="imgWallHover" id="imgWallHover9384938">
            <div class="imgWallHoverBottom">
                <div class="imgWallHoverDescription ">
                    <q class="ellipsis">Quote about the image</q>
                </div>
            </div>
        </div>


    </div>
</a>

给定图像具有不同的ID(9384938部分)。

我如何获得所需信息?

我现在有另一个函数返回其中一个图像的数据(种类),但它基本上与爆炸之间的代码完全相同,这非常混乱。

1 个答案:

答案 0 :(得分:0)

您可以在此函数中使用PHP的Union = A | B # where A,b,Union are sets 类:

DOMDocument

将其命名为:

function getDataFromHTML($html) {
    $doc = new DOMDocument();
    $html = $doc->loadHTML($html);

    foreach($doc->getElementsByTagName('a') as $a) {
        if (strpos($a->getAttribute('class'), 'profile_media_item') !== false) {
            $row = [];
            $row['baseURL'] = $a->getAttribute('href');
            foreach($a->getElementsByTagName('div') as $div) {
                preg_match("~(?<=url\(['\"]).*?(?=['\"])~", 
                           $div->getAttribute('style'), $attr);
                $row['imageURL'] = reset($attr);
                foreach($a->getElementsByTagName('q') as $q) {
                    $row['quote'] = $q->textContent;
                    break;
                }
                break;
            }
            $result[] = $row;
        }
    }
    return $result;
}

样本数据的输出是:

$result = getDataFromHTML($html);

如果在具有多个DOM结构的HTML字符串上运行,则外部数组将具有更多此类条目。