Практический пример: используйте PHPQuery для сканирования 3000 изображений из Tumblr
На Tumblr есть несколько красивых изображений. Мы можем использовать API-интерфейсы Tumblr для поиска и загрузки изображений, однако для этого обычно требуется регистрация и ключи API. Другой способ — просканировать веб-страницы HTML и проанализировать DOM (объектную модель документа), что позволяет нам получать URL-адреса изображений и их описания.
Существует удобная библиотека, которая называется PHPQuery. Это позволяет нам писать PHP в стиле JQuery так же, как мы пишем JQuery, используя селекторы CSS. Это делает PHP мощным инструментом для анализа DOM любых HTML-страниц.
phpquery
Ниже приведен псевдокод, иллюстрирующий, как анализировать HTML — страницы и захватывать изображения.
С PHPQuery становится намного проще анализировать DOM! Нажмите, чтобы твитнуть
require('phpQuery.php');
require('app.php');
$ip = get_ip_address();
function grab($url, $lvl = 5) {
global $ip;
if ($lvl < = 0) {
return;
}
$doc = phpQuery::newDocumentFile($url);
foreach(pq('div.TumbPostPane') as $p) {
$img = pq($p)->find('img.PhotoPostMainPhoto')->attr('src');
$desc = htmlspecialchars(trim(pq($p)->find('div.MetaPanel')->html()));
$url = pq($p)->find('a')->attr('href');
$err = '';
if (UploadPic($img, $desc, $err, $ip)) { // find pictures and save locally
echo "OK = $err n";
} else {
echo str_replace("<br />", "n", "Error = $err n");
}
grab($url, $lvl - 1); // recursive download
}
}
grab("<a class="vglnk" target="_blank" href="https://uploadbeta.com" rel="nofollow"><span>https</span><span>://</span><span>uploadbeta</span><span>.</span><span>com</span></a>", 1);
С небольшими изменениями вы можете позволить сценарию сканировать несколько тысяч изображений за несколько минут. Все изображения сохраняются в локальные базы данных на сервере VPS. Фотографии можно увидеть на сайте: uploadbeta.com
Лучше установить временной интервал между сканированием страниц, иначе IP-адрес может быть заблокирован.
Сканирование изображений
PS, веб-сайт Image Upload поддерживает несколько API для различных целей в соответствии с политикой добросовестного использования: https://uploadbeta.com/picture-gallery/faq.php#api .
