Технические детали устройства Grab

Используемые библиотеки

По сути, Grab - это удобный интерфейс к двум библиотекам: pycurl и lxml.

Pycurl предоставляет возможность настраивать и осуществлять синхронные и асинхронные сетевые запросы.

Lxml даёт удобный способ работы с HTML-документами. В первую очередь это построение DOM-дерева, выборка элементов через XPATH и автоматический разбор форм.

Кроме этих двух библиотек в Grab использует множество стандартных модулей языка Python.

Для полноценной работы с Grab вам практически не нужно знать API библиотеки pycurl, но вот как устроен lxml знать вам нужно обязательно. Спасибо разработчикам lxml - они создали прекрасную документацию: http://lxml.de Рекомендую начать с The lxml.etree Tutorial

Структура расширений

Изначально исходники Grab представляли из себя один файл. Далее файл становился больше и больше и, наконец, стало ясно, что нужно разбивать функциональность по модулям. Grab спроектирован как базовый класс, наследующий свойства множества модулей, называемых расширениями. Работа с сетевыми функциями вынесена в модули, называемые транспортами. Основной транспорт Grab это pycurl. Также ведутся работы по прикручиванию urllib и Selenium. Основная идея транспортов в том, что можно заменить один транспорт другим и программа останется рабочей.

Поддержка python 3

Grab тестируется под python 2.7. Насчёт работоспособности в py3k ничего не могу сказать пока.