事实证明,我尝试以这种方式提取图像:
$url = 'https://m.fa.com/perfil123';//cualquier perfil
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url );
curl_setopt($ch,CURLOPT_HEADER,0); //visualizar ñ y acentos.
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true );
curl_setopt($ch, CURLOPT_ENCODING, "gzip,deflate"); //(aceptación de codificación gzip)
$url = curl_exec($ch); //almacena el response de la pagina.
curl_close($ch);
preg_match('#class="bo img" src=[^"]*"([^"]*)"#', $url, $datos)
$img = $datos[1];
echo $img;
这是我正在寻找的图像的 HTML:
<img width="72" height="72" alt="" class="bo img" src="https://scontent-mia3-2.xx.fbcdn.net/v/t1.0-1/cp0/e15/q65/p74x74/21151613_1725782907724134_7535903357386699205_n.jpg?efg=eyJpIjoiYiJ9&oh=4f22a577f965566b2016ef842f5b110f&oe=5A1DE043">
我正在使用class
来定义图像,但我不知道错误在哪里。
使用正则表达式(不推荐)
正如我告诉您的,您使用的正则表达式与您的问题的 HTML 完美匹配(参见演示)。但是,不建议为此使用正则表达式。例如:
<img>
,所以<input type='text' value'class="bo img" src="url.jpg"'>
你会有一个问题......而且它很容易解决,但是......class="bo img" data-ejemplo="bla" src="url.jpg"
您会遇到问题……而且可以很容易地解决,但是……class="bo img"
您就会遇到问题……而且可以很容易地解决,但是……<!-- <img class="bo img" src="url.jpg"> -->
你会有一个问题......它可以解决,但是......最好将其修改为:Ver en regex101
但是,在很多情况下它还是会失败。
使用 DOM(推荐)
您不应该使用正则表达式来处理 HTML。在您设置表达式的级别上,即使是对 HTML 的微小更改也会导致您的正则表达式失败。额外的空格、标签属性的更改、注释或更复杂的结构,即使是巨大的正则表达式也会不遵守规则。即使使用非常高级的表达式,您也可以生成近乎故障安全的情况,但您几乎总能找到导致其失败的罕见情况。此外,每次您想要修改它时都需要专家。
使用DOM处理 HTML 非常容易,这些都是为此而设计的工具。
如果我们有如下 HTML:
像这样简单地生成 DOM:
我们可以通过以下方式获取 DOM 中的所有图像:
与他们一起经历
获取每个类:
和图片网址:
代码:
结果:
示范:
Ejecutar en 3v4l.org