Screen Scraping di link image in PHP

Ho un sito web che contiene molte pagine differenti di prodotti e each pagina ha una certa quantità di immagini nello stesso formato su tutte le pagine. Voglio essere in grado di schermare l'URL di each pagina in modo da poter recuperare l'URL di each image da ciascuna pagina. L'idea è di creare una galleria per each pagina composta da immagini hotlink.

So che questo può essere fatto in PHP, ma non sono sicuro di come raschiare la pagina per più collegamenti. Qualche idea?

Consiglierei di usare un parser DOM, come il DOMDocument molto personale di PHP. Esempio:

$page = file_get_contents('http://example.com/images.php'); $doc = new DOMDocument(); $doc->loadHTML($page); $images = $doc->getElementsByTagName('img'); foreach($images as $image) { echo $image->getAttribute('src') . '<br />'; } 

È ansible utilizzare un'espressione regolare (regex) per passare attraverso l'origine della pagina e analizzare tutti i tag IMG.

Questa espressione regolare farà il lavoro abbastanza bene: <img[^>]+src="(.*?)"

Come funziona?

 // <img[^>]+src="(.*?)" // // Match the characters "<img" literally «<img» // Match any character that is not a ">" «[^>]+» // Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+» // Match the characters "src="" literally «src="» // Match the regular expression below and capture its match into backreference number 1 «(.*?)» // Match any single character that is not a line break character «.*?» // Between zero and unlimited times, as few times as possible, expanding as needed (lazy) «*?» // Match the character """ literally «"» 

Esempio di codice PHP:

 preg_match_all('/<img[^>]+src="(.*?)"/i', $subject, $result, PREG_PATTERN_ORDER); for ($i = 0; $i < count($result[0]); $i++) { // image URL is in $result[0][$i]; } 

Dovrai fare un po 'più di lavoro per risolvere cose come gli URL relativi.

Mi piace molto PHP Simple HTML DOM Parser per cose come questa. Un esempio di immagini che catturano è proprio lì sulla prima pagina:

 // Create DOM from URL or file $html = file_get_html('http://www.google.com/'); // Find all images foreach($html->find('img') as $element) echo $element->src . '<br>'; 

Puoi farlo per scartare le pagine.

http://simplehtmldom.sourceforge.net/

ma richiede PHP 5+.