1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/jiaochuanduo-Ratel

Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Ratel: разработка документации

Ratel основан на urllib и selenium для реализации запросов и имитации поведения браузера. В качестве браузеров используются:

  • Chrome, который взаимодействует с selenium через chromedriver;
  • PhantomJS — безголовый браузер, взаимодействующий с selenium через phantomjsdriver.

Быстрое переключение между браузерами осуществляется через cookie. Например, при публикации на форуме сначала нужно авторизоваться. Если отдельные параметры запроса трудно анализировать, можно использовать selenium для имитации входа в систему. После успешного входа cookie передаются методу запроса, что позволяет выполнять публикацию.

Рекомендуется использовать PhantomJS. Однако если некоторые веб-сайты не отображаются корректно, следует выбрать Chrome. Стоит отметить, что Chrome больше не поддерживает CentOS. Если требуется Java, рекомендуется использовать Ubuntu или попробовать другие облачные сервисы, кроме Alibaba Cloud, так как в Windows на этой платформе команда Thread.sleep может работать некорректно.

Установка

Для разработки Ratel требуется Python 3 и выше. Также необходимы следующие зависимости:

  • Selenium версии 3.7.0 (можно скачать с pypi.python.org/pypi/selenium/3.7.0);
  • после скачивания и распаковки Selenium необходимо установить его командой python setup.py install или pip install -U selenium.

Сам Ratel устанавливается командой python setup.py install в корневом каталоге Ratel-1.0.

Структура проекта

Пакет Описание Модуль Описание
collect Способ сбора данных request_basic Реализация запросов на основе urllib
webdriver_basic Имитация браузера на основе selenium
common Общие модули dict Общий словарь, содержащий только текущий UA
main Главный вход do_task Вход для выполнения задач
task Задачи task_basic Задача

Процесс выполнения

Начало работы

  • Создание класса Task для определения задачи:

    • импортировать класс Task из ratel.task.task_basic;
    • создать класс RequestTask, унаследованный от Task;
    • определить свойства __url и __result;
    • реализовать методы set_url и set_result для установки URL и результата соответственно;
    • реализовать свойства get_url и get_result для получения URL и результата.
  • Создать класс Dispose для обработки результатов задачи:

    • импортировать класс Dispose из ratel.task.task_basic;
    • создать классы RequestDispose и SeleniumDispose, унаследованные от Dispose;
    • определить свойство __result и методы set_result и str для работы с результатом и его отображения.
  • Создать Execute для выполнения задачи:

    • импортировать необходимые классы и модули;
    • создать класс RequestExecute, унаследованный от Execute;
    • переопределить метод get_task для имитации получения задачи;
    • добавить задачу в очередь;
    • запустить поток для получения задач каждые 10 секунд;
    • переопределить метод do_task для выполнения задачи. |config|конфигурация| |options|системные свойства| |pool_size|размер пула процессов| |tasks|набор задач| |task|задача| |task_class|класс выполнения| |task_package|пакет, в котором находится класс выполнения|
  1. Запуск программы с помощью команды main.py

Использование Selenium для выполнения задачи

Метод использования аналогичен методу запроса, необходимо только изменить task_class в config.xml на SeleniumExecute.

Примечание: конкретные методы использования WebDriver в Selenium см. в документации: документ 1 или документ 2.


Модуль анализа

Модуль task_basic (предоставляет поддержку задач)

  1. Класс Task, базовый класс для всех задач. В процессе разработки каждый класс задач должен наследовать этот класс.
  2. Класс Dispose, класс обработки результатов, в процессе разработки каждый класс результатов должен наследовать этот класс.
  3. Класс Execute, класс выполнения задач, в процессе разработки все классы выполнения должны наследовать его, иначе задача не может быть выполнена. Классы выполнения предоставляют две очереди: очередь задач и очередь отчётов. Эти очереди инициализируются в методе init, поэтому каждый наследуемый класс выполнения должен вызывать метод init базового класса в своём методе *init, если только он не использует очередь для доступа к задачам.
    При использовании очередей, метод _empty используется для проверки пустоты очереди, и при пустой очереди попытка получить задачу вызовет исключение. После извлечения задачи из очереди следует вызвать метод task_done, чтобы уведомить очередь об удалении текущей задачи.
    Класс Execute также предоставляет пять методов:
метод параметр описание
get_task нет получение задачи. Задачи могут храниться в очереди. Рекомендуется использовать многопоточность для вызова этого метода.
do_task нет выполнение задачи. Внутри этого метода можно использовать потоки для вызова get_task и up_task для асинхронного получения задач для отчёта.
up_task нет отчёт о задаче. Задачи могут храниться в очереди, рекомендуется использовать многопоточность для вызова этого метода.
dispose результат обработка результата задачи
end нет обработка после завершения задачи, например освобождение ресурсов, сохранение данных и т. д.

do_task модуль (обеспечивает планирование задач)

  1. Метод do_pool выполняет задачи через многопроцессорность, читая config.xml, размер пула по умолчанию равен 10, который можно настроить, изменив размер пула в config.xml.

Примечание: рекомендуется, чтобы размер пула был больше, чем количество задач в config.xml. Если размер пула меньше общего количества задач, то избыточные задачи будут отложены до тех пор, пока в пуле не освободится место.

  1. Метод do_dict выполняет задачи в многопроцессорном режиме, перебирая предоставленный словарь, размер пула по умолчанию также равен 10.
  2. Метод do выполняет одну задачу в одном процессе.

dict модуль (предоставляет настройки по умолчанию)

header_default — заголовки запросов по умолчанию, предоставляющие заголовки для Chrome, Firefox и IE.

request_basic модуль (предоставляет выполнение задач на основе запросов)

  1. Класс Url, создание запроса
поле значение по умолчанию описание
url нет адрес запроса, обязательно. Адрес должен содержать http:// или https://
method GET способ запроса, поддерживает GET и POST
header Chrome_UA заголовок запроса
data нет параметры запроса, тип dict, этот параметр действителен только для метода POST
cookie нет объект CookieJar
proxy нет IP-адрес прокси
retry_num 3 количество повторных попыток при возникновении исключения
time_out 30 время ожидания, в секундах
  1. Класс Response, запрос ответа
поле значение по умолчанию описание
response_code нет код ответа
response_content нет содержимое ответа
cookie нет файлы cookie ответа
request_url нет URL запроса
cookie нет CookieJar объект
  1. Метод request_url отвечает за отправку запроса, параметром является объект класса Url, encoding (кодировка параметров запроса, по умолчанию utf-8).

webdriver_basic модуль (выполняет задачи на основе Selenium)

Класс Driver, создание webdriver

поле значение по умолчанию описание
driver_type нет тип webdriver, поддерживает только chrome и phantomjs, обязательно
executable_path нет путь к драйверу
headers нет заголовки запроса, chrome поддерживает только установку UA
cookies нет куки, тип dict
proxy нет прокси-сервер
loadimgs True загрузка изображений, рекомендуется отключить загрузку изображений в phantomjs для ускорения запросов

Примечание: для использования Firefox, IE или других браузеров обратитесь к соответствующей документации. Для передачи файлов cookie между двумя методами обратите внимание на преобразование их в соответствующий тип.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
GPL-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/jiaochuanduo-Ratel.git
git@api.gitlife.ru:oschina-mirror/jiaochuanduo-Ratel.git
oschina-mirror
jiaochuanduo-Ratel
jiaochuanduo-Ratel
master