2011-06-05 81 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');