Скрипинг ссылок на изображения в PHP - PullRequest
2 голосов
/ 16 июля 2010

У меня есть веб-сайт, который содержит много разных страниц товаров, и на каждой странице есть определенное количество изображений в одном формате на всех страницах.Я хочу, чтобы можно было просмотреть URL каждой страницы, чтобы я мог получить URL каждого изображения с каждой страницы.Идея состоит в том, чтобы сделать галерею для каждой страницы, состоящей из изображений с горячей ссылкой.

Я знаю, что это можно сделать в php, но я не уверен, как очистить страницу для нескольких ссылок.Есть идеи?

Ответы [ 4 ]

6 голосов
/ 16 июля 2010

Я бы порекомендовал использовать синтаксический анализатор DOM, например, собственный PHP DOMDocument .Пример:

$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 />';
}
0 голосов
/ 16 июля 2010

Вы можете использовать это для удаления страниц.

http://simplehtmldom.sourceforge.net/

, но для этого требуется PHP 5 +.

0 голосов
/ 16 июля 2010

Мне действительно нравится PHP Simple HTML DOM Parser для таких вещей.Пример захвата изображений прямо на главной странице:

// 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>';
0 голосов
/ 16 июля 2010

Вы можете использовать регулярное выражение (регулярное выражение), чтобы просмотреть источник страницы и проанализировать все теги IMG.

Это регулярное выражение выполнит эту работу довольно хорошо: <img[^>]+src="(.*?)"

Как это работает?

// <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 «"»

Пример кода 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];
}

Вам придется проделать немного больше работы, чтобы разрешить такие вещи, как относительные URL.

...