我目前正在使用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,我该怎么做?
答案 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