PHP提取字符串的一部分(如果找到)

Pin*_*wer 1 php laravel

我正在抓取一个网站并找到一个字符串,然后当找到该字符串时,我将提取该字符串的一部分。

我正在网站中寻找一个字符串“ twitter:image”,然后找到该字符串时,我将提取该字符串的“ content”值。因此,这是我要抓取的网站的示例。这是该网站的HTML或“查看源代码”:

在此处输入图片说明

这是我的代码示例:我正在使用一个名为“ ProxyCrawl”的库

$ch = new ProxyCrawl();

$response = $ch->get($link, false);

if ($response->original_status == 200) {
    $result = $response->body;
     if (strpos($result, 'name="twitter:image"') !== false) {
        Log::debug("found!");
        //then extract the content
     } else {
        //do nothing              
     }

 }
Run Code Online (Sandbox Code Playgroud)

我已经有了检查“ twitter:image”是否存在的代码,但是在提取“ content”值时我没有代码。

任何帮助是极大的赞赏。谢谢!

Ale*_*ruk 8

如果<meta name="twitter:image" />是页面上的唯一元素,则使用此元素:

$ch = new ProxyCrawl();
$response = $ch->get($link, false);

if ($response->original_status == 200) {
    $dom = new DOMDocument;
    $dom->loadHTML($response->body);
    $xpath = new DOMXpath($dom);

    $element = $xpath->query("//meta[@name='twitter:image']/@content");

    if (!empty($element->item(0))) {
        $imageUrl = $element->item(0)->nodeValue;
    }
}
Run Code Online (Sandbox Code Playgroud)

否则,如果有多个此类元素,则需要迭代:

$ch = new ProxyCrawl();
$response = $ch->get($link, false);

if ($response->original_status == 200) {
    $dom = new DOMDocument;
    $dom->loadHTML($response->body);
    $xpath = new DOMXpath($dom);

    $imageUrls = [];
    $elements = $xpath->query("//meta[@name='twitter:image']");

    if ($elements !== false) {
        foreach ($elements as $element) {
            $imageUrls[] = $element->getAttribute('content');
        }
    }
}
Run Code Online (Sandbox Code Playgroud)