Dark_Strannik
9.01.2014 - 12:59
Здравствуйте форумчане.
Необходимо парсить картинки с двух сайтов. Берем из БД все что необходимо и через цикл WHILE запускаю парсер. Но он парсит несколько имен и останавливает. Поэтому ставлю в запросе LIMIT и парсю по 50 имен. Жду когда отработает скрипт, изменяю с какого числа парсить и снова запускаю. В чем проблема, что не так, почему после перезагрузки скрипта парсер снова загружает картинки?
Работать работает, но криво, так как в базе 300 000 с лишним имен.
Часть кода:
$sth = $dbh->query("SELECT `nameArtist` FROM `parserpicture` LIMIT $start, $limit");
$sth->setFetchMode(PDO::FETCH_ASSOC);
while($row = $sth->fetch()){
$nameArtist = $row['nameArtist'];
$url = 'сайт_номер_1/?q='.$nameArtist;
$links = firstLink($url);
secondLink($links, $nameArtist);
$url = 'сайт_номер_2/'.$nameArtist;
$first = firstNastol($url);
secondNastol($first, $nameArtist);
}
Игорь_Vasinsky
9.01.2014 - 13:01
Цитата |
почему после перезагрузки скрипта парсер снова загружает картинки? |
покажи где у тебя в скрипте алгоритм проверки уже загруженных картинок?
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Dark_Strannik
9.01.2014 - 13:09
такого нет, и не знаю что это, проверяю визуально, открываю - смотрю
Игорь_Vasinsky
9.01.2014 - 13:14
вот по этому и загружает по новой - т.к. алгоритм заного начинает работать, а проверки нет.
или ты имеешь ввиду, что когда меняются значения
Цитата |
LIMIT $start, $limit" |
?
значит проверяй свой пагинатор
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Dark_Strannik
9.01.2014 - 13:19
парсер картинки загружает
если возьму из базы 100 000 картинок, он загрузит 20-30 и останавливается
поэтому загружаю понемногу
что обозначает "пагинатор"?
Игорь_Vasinsky
9.01.2014 - 13:25
Цитата |
что обозначает "пагинатор"? |
pagination
не бери в голову.
ты пытаешься касками из БД брать строки - так? так
на каждую строку запускаешь парсер и получаешь картинку - так? так
у тебя когда повторы картинок идут?
когда как ты запускаешь парсер? по новой? или с другим LIMIT ?
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Dark_Strannik
9.01.2014 - 13:34
не повторы
парсер не парсит все записи
загрузит 20-30 картинок и все - останавливается словно ограничение на сайтах стоит, нельзя скачивать больше n-го количества
но если я изменю/не изменю значение LIMIT он снова буде загружать будто и нет никакого ограничения
Игорь_Vasinsky
9.01.2014 - 13:43
интервалы делай между парсингом, секунды 2-4
или используй прокси
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Dark_Strannik
9.01.2014 - 13:47
интервалы - sleep(5) раньше был в самом начале цикла WHILE, не помогало
WHILE(...){
sleep(5);
...
}
я конечно погуглю, но что такое "прокси"?
Игорь_Vasinsky
9.01.2014 - 14:05
прокси сервера + curl
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Dark_Strannik
15.01.2014 - 10:31
благодарю, сейчас стало лучше работать, хотя барахлит парой
$arrayProxy = array('...');
shuffle($arrayProxy);
$proxy = $arrayProxy [0]
function get($url, $proxy)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.1) Gecko/2008070208');
curl_setopt($ch, CURLOPT_PROXY, "$proxy");
$ss=curl_exec($ch);
curl_close($ch);
return $ss;
}
возможно я сделал что-то не так
Игорь_Vasinsky
15.01.2014 - 10:52
бесплатные прокси могут неожиданно умирать(проверять ответ и если что брать следующий или другой), такое бывает, + multicurl
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Dark_Strannik
21.01.2014 - 09:44
спасибо за совет, теперь работает без сбоев, но в разы медленнее
function getPage($url, $proxy){
$headers[] = 'Accept: image/gif, image/x-bitmap, image/jpeg, image/pjpeg';
$headers[] = 'Connection: Keep-Alive';
$headers[] = 'Content-type: application/x-www-form-urlencoded;charset=UTF-8';
$userAgent = 'Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 (NET CLR 3.5.307029)';
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_PROXY, $proxy);
$result = curl_exec($ch);
if(curl_error($ch)){
global $file;
shuffle($file);
$proxy = $file[0];
getPage($url, $proxy);
}
curl_close($ch);
return $result;
}
$end = n;
for($start=n; $start<=$end; $start++){
$proxyList = 'proxy.txt';
$file = file($proxyList);
$limit = 1;
$sth = $dbh->query("SELECT `id`, `nameArtist` FROM `parserpicture` LIMIT $start, $limit");
$sth->setFetchMode(PDO::FETCH_ASSOC);
$row = $sth->fetch();
shuffle($file);
$proxy = $file[0];
Возможно, что снова накосячил.
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.