Curl VS fsock VS file

Gleb
На сайте с 13.03.2006
Offline
46
1545

Доброе время суток,

Вот тут решил написать один скриптец, и столкнулся со следующим вопросом, если надо очень часто парсить некоторые страницы с разных серверов (около 7), примерно 20 страниц за раз (выполнение скрипта) и в час примерно по 50-80 таких заупсков скрипта.

Что лучше использовать для того чтобы достать информацию с удалённого сервера cURL, сокеты или банальное fopen() ? Лучше с точки зрения нагрузки на сервер на котором мои скрипты лежат. Потому что не хотелось бы чтобы в один прекрасный момент хостер попросил бы меня больше не пользоваться его услугами, т.к. скрипт даёт большую нагрузку на сервер.

И вообще хотелось бы узнать мнение тех у кого есть опыт в парсерах, насколько сильно даёт нагрузку модуль cURL, т.к. ему на данный момент я отдаю больше предпочтение. Не страшно ли серверу достать cURL'ом с разных сайтов около 50 страниц за раз?

Да и попробую предугадать ваш встречный вопрос типа - "А смотря какие страницы парсить", отвечу - Google (PR, SERP, BL), Yandex (CY, SERP, dir search, BL), Dmoz (dir search), Yahoo (SERP, dir search, BL), Rambler (SERP, BL), Mail.ru (SERP - хотя еще не знаю надо ли) пожалуй всё. Т.е. вот основные странички для парсинга.

Так что лучше использовать для этого, cURL, сокеты или fopen() ?

Спасибо.

dkameleon
На сайте с 09.12.2005
Offline
386
#1

Не вижу никакой особой разницы.

Курл и ФОпен - это те же надстройки над сокетами.

В курле из 5-го ПХП разве что можно организовать многопоточность :)

Как по мне, с Курлом намного удобнее.

Дизайн интерьера (http://balabukha.com/)
MM
На сайте с 02.12.2003
Offline
49
m&m
#2

Лучше конечно использовать высокоуровневую библиотеку (типа curl в Вашем случае или модули из pear.php.net), потому как позднее может понадобиться поддержка cookie, 30x-редиректов и т.п. Можно в очередной раз написать свой сокетный велосипед, но зачем?

По нагрузке проблем особых нет. Вот у меня качалка самописная прямо сейчас тянет файлы в 4-ре потока, общая загрузка сервера - 3%. При том, что там еще люди по сайтам бродят :)

Ну и, разумеется, пишите регулярные выражения аккуратнее и никто Вас ругать не будет :)

[Удален]
#3

Со стороны нагрузки что в лоб что по лбу, выгода от грамотных регулярок всё перекроет

Если стоит вопрос совместимости на разных хостингах то можно предусмотреть все 3 варианта

if ( ini_get('allow_url_fopen') ) {

// --- тра-ля ля три рубля

} elseif ( extension_loaded('curl') ) {

// --- тра-ля ля три курля

} else {

// нифига не доступно

}

nickspring
На сайте с 29.03.2006
Offline
228
#4

m&m, curl'а может не быть на хостинге.

MM
На сайте с 02.12.2003
Offline
49
m&m
#5
nickspring:
m&m, curl'а может не быть на хостинге.

Может, поэтому я лично использую модули с pear.php.net, о чем честно и написал :)

Gleb
На сайте с 13.03.2006
Offline
46
#6
nickspring:
, curl'а может не быть на хостинге.

На моём есть проверял лично, но для такого дела собираюсь взять маленький VDS, так что тут этот вопрос боком не встанет.

А так, всем спасибо за ответы :)

iexpert
На сайте с 01.09.2005
Offline
184
#7

В данном случае лучше курл либо чистые сокеты.

file_get_cintents слишком мало оставляет места для шагов вправо влево и для прыжков в высоту...

Бойтесь ваших желаний, ибо они могут исполниться
[Удален]
#8

iexpert, Эти шаги далеко не всегда нужны, имхо использовать нужно не то что "лучше" а то что нужнее в данном случае. Согласитесь из пушки по воробъям палить не стоит. (Если это конечно не воробъи мутанты весом в тонну) :)

mustafa
На сайте с 28.10.2005
Offline
202
#9

Gleb, курл или сокеты по барабану. Если хотите скорости - нужен еще gzip. (почему вы думаете mozilla такая шустрая? из-за gzip'a :) )

http://ru.php.net/manual/ru/function.gzuncompress.php

Gleb
На сайте с 13.03.2006
Offline
46
#10

Окей буду пробовать, пока скажу результаты меня не очень радуют

Скрипт определения PR, CY, Каталог Яндекса, Беки по Яндексу, Гуглу, Яху и присутствие в дмозе, обрабатывает от 3 до 7 секунд 1 домен. Может я не правильно время считаю:

<?

$starttime=time();
/*
Действия программы
*/
print "Обработка ".strval(time()-$starttime)." сек";
?>

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