Технические детали устройства 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 ничего не могу сказать пока.