Проблема с парсером. Слишком большое время обработки

R
На сайте с 03.08.2012
Offline
131
1240

$user_agent = '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.30729)';
$cookie = '';

$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

$post = array(
'login' => 'TranceArmy',
'password' => 'Nadezhda',
'logon' => 'Войти'
);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));

curl_setopt($ch, CURLOPT_POST, false);
curl_setopt($ch, CURLOPT_URL, 'http://www.radiostyle.ru');

$answer = curl_exec($ch);
curl_close($ch);

Это пока просто скрипт который вытягивает html с сайта http://www.radiostyle.ru. Время обратки очень долгое и сильно скачет. В основном 3-5 секунд парсит, но бывает и 12 милисекунд а бывало и до 25 секунд доходило. Когда ставлю вместо сайта http://www.radiostyle.ru, яндекс, парсит 20 милисекунд. Почему другой сайт так долго парсит, при этом если перейти на сайт ручками, по кликать, грузиться он достаточно быстро.. Помогите, пожалуйста, решить проблему...

lutskboy
На сайте с 22.11.2013
Offline
185
#1

у меня нормально грузиться

SocFishing
На сайте с 26.09.2013
Offline
118
#2

1. По всей видимости у вас кеш в браузере, по этой причине и быстро

2. Если парсите не с локалхоста, а с сервера - то значит у сервера канал шире

3. Возможно на сайте кеширование, страницы вне кеша долго грузит, а вы грузите ранее открываемые страницы сайта

4. Нагрузка на сайте который парсите скачет

Ускорить можно потоками на парсинг.. +

curl_setopt($ch, CURLOPT_TIMEOUT, 30);
★Сервис идентифицирует (https://socfishing.com/?utm_source=searchengines) посетителей вашего сайта и предоставляет их профили ВКонтакте, Телефон, Почта! Цены копеечные, работаем 8 лет.
R
На сайте с 03.08.2012
Offline
131
#3

Что за потоки на парсинг?

SocFishing
На сайте с 26.09.2013
Offline
118
#4
revered:
Что за потоки на парсинг?

Многопоточный парсер, т.е. парсинг в несколько независимых процессов скачивания, а не в один. У вас сейчас парсит страницы в 1 поток. Это долго, так как пока контент страницы не будет получен, функция не приступает к скачиванию другой страницы.

Для примера:

http://stupid.su/php-curl_multi/

В гугле множество примеров: multi curl, async sockets, thread process или же простые php -q, fopen php и т.п.

Я так понял страниц достаточно много для парсинга и их нужно постоянно обновлять. Если нет, то все в один поток скрипя байтами можно тянуть.

forest25
На сайте с 12.09.2009
Offline
67
#5

Попробуйте воткнуть в парсер метрики чтобы можно отследить какой участкок кода у вас медленно работает. Вполне возможно что у вас сама часть ответственная за разбор DOM-дерева как то не так написана и гоняет бесконечные и бесполезные циклы. Хотя все же склоняюсь к тому что медленней всего будет именно часть которая забирает данные с сервера.

Самое интересное что работать должно намного больше ибо:

1) На серверах обычно шире канал

2) Для получения данных скрипт сделает всего 1 запрос в то время как клиентский браузер будет еще грузить картинки, css и js

Также вполне возможно что на сервере с которого парсятся данные стоит ограничение на кол-во запросов с одного ip в определенный промежуток времени либо даже ваш парсер «подвешивает» тот сервер. Попробуйте одновременно с запуском парсера походить по страничкам сайта.

Также я смотрю что при парсинге вы логинитесь на сайте, довольно часто на сайтах делают кеширование только для анонимных посетителей, загруженные же все видят без кеша и вполне возможно что это создает нагрузку на том сайте.

VPS 512MB 20GB SSD KVM - 5$ (http://u.hmdw.me/digitalocean) | ИМХО о хостингах (http://u.hmdw.me/hosting)
R
На сайте с 03.08.2012
Offline
131
#6

Спасибо за инфу, сейчас буду разбираться

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий