如何使用PHP从HTML源代码中提取特定字符串

时间:2017-05-23 20:23:13

标签: php html string url substring

我试图从整个HTML源代码中提取特定字符串。

HTML来源:view-source:https://www.instagram.com/p/BUbZXXMjnxY/?taken-by=narentrigger&hl=en

需要提取字符串:https://instagram.fmaa1-2.fna.fbcdn.net/t51.2885-15/e35/18645014_163619900839441_7821159798480568320_n.jpg 来自" og:image"元属性。

我尝试了一些方法,但一切都出了问题。有没有办法从源代码的og:image元属性中获取图像链接。提取后需要将图像url存储在特定变量上。专家帮助需要。 Url that need to extract

4 个答案:

答案 0 :(得分:1)

如果您只抓取一个子字符串,请不要使用preg_match_all()。加载DOMDocument对于此任务来说似乎有些过分。

通过使用\K,您可以减少结果数组膨胀。

示例输入:

$input='<meta property="og:title" content="Instagram post by Narendiran blah blah" />
<meta property="og:image" content="https://instagram.fmma1-2.blah.jpg" />
<meta property="og:description" content="8 Likes, 1 Comments - blah" />';

方法(Demo):

$url=preg_match('/"og:image"[^"]+"\K[^"]+/',$input,$out)?$out[0]:null;
echo $url;

输出:

https://instagram.fmma1-2.blah.jpg

使用否定字符类可以更有效地运行正则表达式引擎。 [^"]。 (Pattern Demo

答案 1 :(得分:0)

假设你在PHP字符串中有标记,RegEx有什么问题?

preg_match_all('/<meta.*property="og:image".*content="(.*)".*\/>/', $string, $matches);
echo $matches[1][0];

Demo

免责声明:可以提供更高效的正则表达式

答案 2 :(得分:0)

在此代码段中,我使用DOMDocument从元标记中删除属性内容。它将它存储在一个数组中,以防有更多并返回它。 希望它有效。

Files | Open...

答案 3 :(得分:0)

尝试使用此代码来废弃网页。 我使用了 simple_html_dom_parser 。 您可以从https://sourceforge.net/projects/simplehtmldom/files/

下载
include_once("simple_html_dom.php");

$output_filename = "example_homepage.html";
$fp = fopen($output_filename, 'w');
$url = 'https://www.instagram.com/p/BUbZXXMjnxY/?taken-by=narentrigger&hl=en';
$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, false);
curl_setopt ($curl, CURLOPT_FILE, $fp);
$result = curl_exec($curl);

curl_close($curl);
fclose($fp);

$html = file_get_html('example_homepage.html');

foreach($html->find('meta[property=og:image]') as $element) 
   echo $element->content . '<br>';