На чем лучше и быстрее написать парсер (PHP)?

Итак, конкурсанты:

1. phpQuery

+ поддерживает кучу селекторов
- невысокая скорость работы

2. Simple HTML Dom

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

3. Nokogiri

+ высокая скорость работы
- ужасная документация

Перечислил все, что пришло в голову, возможно что-то упустил. Так что лучше выбрать?
  • Вопрос задан
  • 17267 просмотров
Решения вопроса 1
muhammad_97
@muhammad_97
PHP-разработчик
DiDom: https://github.com/Imangazaliev/DiDOM

+ высокая скорость работы (сравнение с другими парсерами)
+ хорошая дока
+ большое количество поддерживаемых селекторов
+ самое главное - тесты

Простой пример:

$document = new Document('http://www.example.com/', true);

echo $document->first('title::text');


Чуть посложнее - парсим все ссылки:

$links = $document->find('a[href]::attr(href)');

var_dump($links);


Еще сложнее - получить адреса всех ссылок-картинок:

$links = $document->find('a[href]:has(img)::attr(href)');

var_dump($links);


Другие варианты:
- Symfony DomCrawler
- Zend Dom Query
Ответ написан
Пригласить эксперта
Ответы на вопрос 12
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
PHP: multi-curl+regex+DOMXPath

Пример ( https://www.ibm.com/developerworks/ru/library/x-xp... ) :
$doc = new DOMDocument;
$doc->load('products.xml');
$xpath = new DOMXPath($doc);
$products = $xpath->query("/PRODUCTS/PRODUCT[SKU='soft5678']/NAME");
foreach ($products as $product)
   print($product->nodeValue);
Ответ написан
Комментировать
glebovgin
@glebovgin
Full Stack Web Developer
За годы парсинга данных я пришел к простому набору:

Curl + tidy + DOMXpath
Ответ написан
Комментировать
oe24y
@oe24y
Вот еще jQuery-подобный парсер
PHP Simple HTML DOM Parser
Ответ написан
boonya
@boonya
Backend developer (Python/PHP)
Первый вопрос, парсер чего?
И если я правильно понял задачу этого парсера, то зачем вы изобретаете велосипеды?

* cURL для получения контента - php.net/manual/ru/book.curl.php
Или вот еще нашел объектно ориентированную обертку https://github.com/php-curl-class/php-curl-class
* И, собственно, SimpleXML для разбора документа.

Оба компонента "из коробки" поставляются с PHP. Унифицированные, задокументированные и всем известные интерфейсы.

Или вот еще, компонент Symfony2 symfony.com/doc/current/components/dom_crawler.html
Ответ написан
Комментировать
@OneFive
React.js <3
Очень крутая штука https://github.com/sleeping-owl/apist
Ответ написан
Комментировать
@PooH63
Я остановился на Nokogiri
Действительно высокая скорость работы(выбирал из тех же что и вы, только года 1.5-2 назад) и жрёт меньше памяти чем остальные. На счёт доки уже не помню, но разобраться не составило труда
Ответ написан
@bartmanskyi
Надежнее всего на PhantomJs, так как это полноценный browser. Быстрее на phpQuery

П.с. О Simple HTML Dom пишут что работает с невалидным html. Не работает. Моей причиной перехода с него на phpQuery как раз это и было
Ответ написан
Ramzeska
@Ramzeska
Добавлю в копилку и свой велосипед =)
https://bitbucket.org/ramzeska/html-dom-parser/wik...
Ответ написан
Комментировать
@morsvox
если нужно просто получить текст, самой высокой скоростью обладает DOMDocument phpQuery уступает в скорости примерно в 4 раза (по моим личным тестам), зато имеет кучу селекторов и в итоге для себя я выбрал ее

Simple HTML Dom очень медленный
Nokogiri чисто парсер, замены там нет и по сути тот же DOMDocument который оброс хаками, так что смысла в нем нет, если речь идет о скорости
Ответ написан
Комментировать
LightAir
@LightAir
LA
На чём быстрее

Ответ прост, быстрее на знакомом и/или хорошо документированном инструменте.
На чем лучше

Лучше на нативном. Точнее подсказал, уважаемый xmoonlight
Ответ написан
Комментировать
я просто оставлю тут ссылку https://github.com/Imangazaliev/DiDOM/wiki/%D0%A1%...

Выводы делайте сами
Ответ написан
Комментировать
@webstorm
https://github.com/FriendsOfPHP/Goutte
Отличный парсер с возможностью проваливаться вглубь по ссылкам. Простой и удобный интерфейс. В зависимостях у него в composer - е symfony/dom-crawler, так что если верить тестам товарища комментом выше, то производительность в сравнении средняя. Зато порог вхождения быстрый (выборки по css селекторам, получение данных и атрибутов через аналоги jQuery методов .text(), .attr(), а также перебор через .each())
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы