LINUX.ORG.RU

Ищу быструю библиотеку на php для парсинга веб-страниц

 ,


1

2

Ищу быструю библиотеку на php для парсинга веб-страниц
PHP Simple HTML DOM выдает

Fatal error: Maximum execution time of 120 seconds exceeded

★★★★★

Последнее исправление: Qwentor (всего исправлений: 1)

Ответ на: комментарий от Deleted

Вот http://www.novostroyki.org/zastroyschiki/?region[0]=77&region[1]=nm&r...

Надо спарсить все компании и данные по ним в табличку Excel. Для этого надо заходить по ссылке на страничку о каждой и парсить ее.
PHP Simple HTML DOM не справляется

Qwentor ★★★★★
() автор топика
Ответ на: комментарий от Qwentor

вообще такие штуки надо запускать в фоновой задаче, т.к. просто лазить по ссылкам он будет дольше 120сек

нормальный вариант это какойто «менеджер задач», которому ставится задача «распарсить по url», из нее запускаются дочерние задачи для каждого url (есессно кол-во одновременных надо ограничить), а в php просто отображать «задача все распарсить обработала 100ссылок из 120» и все

но в php подозреваю это будет не просто

Deleted
()
Ответ на: комментарий от Qwentor

Надо спарсить все компании и данные по ним в табличку Excel. Для этого надо заходить по ссылке на страничку о каждой и парсить ее.
PHP Simple HTML DOM не справляется

:)

$ for page in {1..32}; do GET "http://www.novostroyki.org/zastroyschiki/?region[0]=77&region[1]=nm&region[2]=50&search_text=&per_page=20&page="$page > zastroyschiki_page_$page.html; done
и дальше парсь-нехочу

anTaRes ★★★★
()
Ответ на: комментарий от Qwentor

не знаю, если на пхп я лет десять назад писал то о ноде только читал страшные истории

Deleted
()

ну и если таки на похапэ и в риалтайме нужно (О_о) - ini_set('max_execution_time', 100500);

anTaRes ★★★★
()
Ответ на: комментарий от Qwentor

с python у меня совсем плохо, а задачу надо выполнять..

есть ещё орг.способ решения задачи: позвонить и договориться с публикатором контента. За разумное вознаграждение могут отдать данные в xml или json.

MKuznetsov ★★★★★
()

Fatal error: Maximum execution time of 120 seconds exceeded

set_time_limit(0);

Kilte ★★★★★
()

Fatal error: Maximum execution time of 120 seconds exceeded

Неожиданно?

anonymous
()

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

surefire ★★★
()
Ответ на: комментарий от anonymous

Не, если питон я хоть в глаза видел, то с руби не пересекался совсем

Qwentor ★★★★★
() автор топика

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

Ты поди ещё в браузере запускаешь?

Deleted
()

На этом сайте есть возможность вбивать в строке сколько компаний на страницу выводить и какую захватывать(&per_page=1&page=1), хоть по одной обрабатывай хоть по 10 последовательно и PHP Simple HTML DOM справится если всё обработать за раз не получается.

И обрабатывать наверное лучше в терминале как намекнули выше.

Frost ★★★
()
Последнее исправление: Frost (всего исправлений: 1)
Ответ на: комментарий от Qwentor

Похоже, придётся все таки Python

А что питон вдруг стал в 10 раз быстрее пыха? Дурью-то не майся, выбрось этот Simple и просто используй встроенный в пых парсер, и лучше не DOM, а SAX.

no-such-file ★★★★★
()

Gearman + модули соотв. для php, т.е. менеджер задач тут уже советовали, только так такие вещи надо разруливать. Если тебе для себя, то сделай консольную версию просто.

n0044h
()

Maximum execution time of 120 seconds exceeded

а что, конфигурировать уже не в моде?

reprimand ★★★★★
()
Ответ на: комментарий от no-such-file

А что питон вдруг стал в 10 раз быстрее пыха?

Хз, но на нем все работает) Вопрос решен)

Qwentor ★★★★★
() автор топика

только регулярки, только хардкор:

$ time GET "http://www.novostroyki.org/zastroyschiki/?region[0]=77&region[1]=nm&region[2]=50&search_text=&per_page=20&page=" | iconv -f cp1251 -t UTF-8 | grep -A1 'div class="co-link"' | grep '<a ' | sed -E 's/.*href="([^"]+)".*title="([^"]+)".*/\1 : \2/'
/zastroyschiki/su-155/ : СУ-155
/zastroyschiki/pik_gk/ : ПИК ГК
/zastroyschiki/morton_gk/ : Мортон ГК
/zastroyschiki/yuit_moskoviya/ : ЮИТ Московия
/zastroyschiki/kompaniya_donstroy/ : Компания ДонСтрой
/zastroyschiki/inkom-nedvizhimost/ : ИНКОМ-недвижимость
/zastroyschiki/capital_group/ : Capital Group
/zastroyschiki/glavmosstroy-nedvizhimost/ : Главмосстрой-недвижимость
/zastroyschiki/peresvet-invest/ : Пересвет-Инвест
/zastroyschiki/bestkon/ : БЭСТКОН
/zastroyschiki/dsk-1/ : ДСК-1
/zastroyschiki/zao_inteko/ : ЗАО «Интеко»
/zastroyschiki/oao_glavuks/ : ОАО Главукс
/zastroyschiki/koncern_krost/ : Концерн &quot;КРОСТ&quot;
/zastroyschiki/mic_gk/ : МИЦ ГК
/zastroyschiki/flet_i_ko/ : Флэт и Ко
/zastroyschiki/centrstroy/ : Центрстрой
/zastroyschiki/mr_group/ : MR Group
/zastroyschiki/vesta_sf/ : Веста СФ
/zastroyschiki/korporaciya_vit/ : Корпорация ВИТ

real	0m2.747s
user	0m0.280s
sys	0m0.034s

составляешь список ссылок со всех страниц
и далее по каждой в цикле таким-же макаром проходишь
делов-то на пару мин. написания и пол-часа парсинга

anTaRes ★★★★
()
Ответ на: комментарий от anTaRes

и пол-часа парсинга

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

TDrive ★★★★★
()
Ответ на: комментарий от TDrive

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

anTaRes ★★★★
()
Ответ на: комментарий от Qwentor

Тебе нужен к питону Beautiful Soup. Оно всё парсит.
Если на сайте всякий ajax и js, цепляешь к питону selenium webdriver и phantomjs (отлаживаешь инструкции селениуму на chromium) и кормишь выводом тот же Beautiful Soup.

Если страницы просто отдаются готовые, используешь в питоне robobrowser (он сам использует Beautiful Soup).

Shadow ★★★★★
()
Ответ на: комментарий от Qwentor

Наоборот, упрощает, несколько строк на всё.

Shadow ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.