2011-06-05 74 views
2

我想根据类或ID获取图像中的src。例如,在html页面有很多<img src="url">,但只有一个有一个类或ID: <img src="url" class="image" or id="image"> 如何获得正确的src属性至极有一个特定的类或ID? PLS正则表达式不是DOM获取基于类或ID的图像的src属性

我该怎么解释你为什么我不想使用DOM或其​​他库,因为我从其他网站,其中不允许的fopen或_file_get_contents或DOM得到一个HTML页面,但只有卷曲能做到这一点。当然,我有一个原因,我不使用simplehtmldom这些库,因为有时不可能获得远程HTML页面,我应该自己制作一些脚本。

+7

DOM是这个工作的工具。 – lonesomeday 2011-06-05 22:36:09

+0

好吧我会解释你为什么我不想使用dom或其他库,因为我从其他网站不允许fopen或_file_get_contents或DOM但只有Curl可以做到这一点从一个HTML页面。当然,我有一个原因,我不使用simplehtmldom这些库,因为有时不可能获得远程HTML页面,我应该自己制作一些脚本。 – goni 2011-06-05 22:53:55

回答

4

如果你绝对必须使用正则表达式,这里是

<img(?:[^>]+src="(.+?)"[^>]+(?:id|class)="image"|[^>]+(?:id|class)="image"[^>]+src="(.+?)") 

这就是说,要做到这一点是使用jQuery或类似DOM的解析技术,以正确的方式。除非你有很好的理由,否则不要使用正则表达式,因为它会错过很多情况(例如,如果使用单引号而不是双引号,或者在“image”之前有空格,它将不起作用)。

+1

因为对于远程html页面不存在这样做的方式。有时某些站点无法通过fopen或file_get_contents访问 – goni 2011-06-05 23:00:02

+0

但是,如果您在内存中有html源代码,则应该可以将它提供给您选择的DOM解析器。对不起,我不是PHP开发人员,所以我对特定的部分不太熟悉,但我确信它们存在。 – 2011-06-05 23:06:55

7

你说你不想使用DOM库,因为你需要使用cURL。没关系 - DOMDocumentsimple_xml_load_string都采用字符串参数。所以你可以从cURL中获取你的字符串并将它加载到你的DOM库中。

例如:

$html = curl_exec($ch); // assuming CURLOPT_RETURNTRANSFER 

$dom = new DOMDocument; 
$dom->loadHTML($html); // load the string from cURL into the DOMDocument object 

// using an ID 
$el = $dom->getElementById('image'); 

// using a class 
$xpath = new DOMXPath($dom); 
$els = $xpath->query('//img[@class="image"]'); 
$el = $els->item(0); 

$src = $el->getAttribute('src');