PHP:如何在html中找到并提取具有src属性的元素(来自url)

时间:2017-03-02 02:45:33

标签: javascript php jquery html

我目前正在使用PHP的curl请求从URL获取内容。获取内容后,我需要检查给定的HTML块,找到一个'视频'具有给定样式属性并提取其源src值文本。目前我得到的页面,但我怎么能得到这个值?这是获取页面的代码:

struct

上面的代码正在工作并输出页面。然后在页面输出中我检查元素,我发现了这个:

<?php
$Url = 'some site';

if (!function_exists('curl_init')){
    die('CURL is not installed!');
}
$ch = curl_init($Url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // add this one, it seems to spawn redirect 301 header
curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13'); // spoof
$output = curl_exec($ch);
curl_close($ch);

echo $output;

我需要上面代码中视频的src,我该怎么做?

5 个答案:

答案 0 :(得分:1)

在PHP级别:

您可以使用preg_match的正则表达式或使用PHP DOMDocument类:

DOM

$doc = new DOMDocument();
$doc->loadHTML($output);
$videoSource = $doc->getElementsByTagName('source');

echo $videoSource->getAttribute('src');

使用REGEX

$array = array();
preg_match("/source src=\"([^\"]*)\" type=\"video\/mp4\">/i", $output, $array);
echo $array[1];

答案 1 :(得分:0)

使用document.querySelector()指向您的元素。然后使用src获取document.getAttribute()属性。

var video = document.querySelector('.webstarvideo video source');
console.log(video.getAttribute('src'));
<div class="webstarvideo">
  <video style="width:100%;height:100%" preload="none" class="">
    <source src="I NEED THIS" type="video/mp4"></video>
  <div class="webstarvideodoul">
    <canvas></canvas>
  </div>
</div>

答案 2 :(得分:0)

如果您想将视频的SRC作为PHP变量,您需要通过检查“type”的位置从字符串中提取它:

$output = '<div class="webstarvideo">
  <video style="width:100%;height:100%" preload="none" class="">
    <source src="I NEED THIS" type="video/mp4"></video>
  <div class="webstarvideodoul">
    <canvas></canvas>
  </div>
</div>';

$type_position = strpos($output, "type=");
$video_src = substr($output, 110, $type_position - 112);
echo $video_src; // I NEED THIS
上例中的

110是SRC属性中包含左侧双引号的字符数,而112是另外两个字符,用于补偿正确的双引号以及type之前的空格。

希望这有帮助! :)

答案 3 :(得分:0)

使用PHP,您可以使用Simple HTML DOM Parser来执行此操作,查询语法,如jQuery。

$Url = 'some site';

if (!function_exists('curl_init')){
    die('CURL is not installed!');
}
$ch = curl_init($Url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // add this one, it seems to spawn redirect 301 header
curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13'); // spoof
$output = curl_exec($ch);
curl_close($ch);

$html = str_get_html($output);

$video = $html->find('video', 0);
$videoSrc = $video->src;
var_dump($videoSrc);

答案 4 :(得分:0)

假设$output是完整文本,您可以使用正则表达式...

preg_match_all("/(?<=\<source).*?src=\"([^\"]+)\"/", $output, $all);

print_r($all[1]); // all the links will be in this array