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

OSCHINA-MIRROR/mcar-scrapy-redis

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

Scrapy-Redis

Статус документации Статус покрытия тестами Статус качества кода Статус требований

Компоненты на основе Redis для Scrapy.

  • Бесплатное программное обеспечение: лицензия MIT
  • Документация: https://scrapy-redis.readthedocs.org/
  • Версии Python: 2.7, 3.4+

Особенности

  • Распределённое веб-расползование/отслеживание

    Вы можете запустить несколько экземпляров пауков, использующих общую очередь Redis. Это идеально подходит для широкого отслеживания множества доменов.

  • Распределённая пострегистрация

    Открытые элементы помещаются в очередь Redis, что позволяет запускать любое количество процессов постобработки, использующих общую очередь элементов.* Встроенные компоненты Scrapy

    Шедулер + фильтр повторений, пайплайн элементов, базовые пауки.

Требования

  • Python 2.7, 3.4 или 3.5
  • Redis >= 2.8
  • Scrapy >= 1.0
  • redis-py >= 2.10

Использование

Используйте следующие настройки в вашем проекте:

# Включает расписание хранения очередей запросов в Redis.
SCHEDULER = "scrapy_redis.scheduler.Scheduler"

# Обеспечивает использование одного и того же фильтра повторений всеми пауками через Redis.
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"  # По умолчанию сериализатор запросов — это pickle, но его можно заменить на любой модуль,
# который имеет функции loads и dumps. Обратите внимание, что pickle не совместим между
# версиями Python.
# Внимание: в Python 3.x сериализатор должен возвращать ключи типа строка и поддерживать
# байты как значения. Именно поэтому модули json или msgpack по умолчанию работать не будут.
# В Python 2.x такой проблемы нет, и вы можете использовать 'json' или 'msgpack' в качестве сериализаторов.
# SCHEDULER_SERIALIZER = "scrapy_redis.picklecompat"
# Не очищайте очереди Redis, что позволяет приостанавливать/возобновлять сбор данных.
#SCHEDULER_PERSIST = True

# Расписание запросов с использованием очереди с приоритетами. (по умолчанию)
#SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.SpiderPriorityQueue'

# Расписание запросов с использованием обычной очереди (FIFO).
#SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.SpiderQueue'  # Максимальное время простоя перед закрытием паука при распределённом сборе данных.
# Это работает только если используется очередь типа SpiderQueue или SpiderStack,
# и может также вызвать временное замедление при первом запуске паука (так как очередь пустая).
SCHEDULER_IDLE_BEFORE_CLOSE = 10

# Сохранение собранной информации в Redis для последующей обработки.
ITEM_PIPELINES = {
    'scrapy_redis.pipelines.RedisPipeline': 300
}

# Ключ Redis, используемый для хранения сериализованной информации о предметах.
REDIS_ITEMS_KEY = '%(spider)s:items'

# Сервис сериализации предметов по умолчанию — ScrapyJSONEncoder. Вы можете использовать любой
# доступный путь к исполняемому объекту.
REDIS_ITEMS_SERIALIZER = 'json.dumps'

# Указание хоста и порта для подключения к Redis (не обязательно).
REDIS_HOST = 'localhost'
REDIS_PORT = 6379

# Полный URL для подключения к Redis (не обязательно).
# Если указан, этот параметр имеет приоритет над параметрами REDIS_HOST и REDIS_PORT.
REDIS_URL = 'redis://user:pass@hostname:9001'

# Пользовательские параметры клиента Redis (например: таймаут соединения, и т.д.).
REDIS_PARAMS = {}

# Использование пользовательского класса клиента Redis.
REDIS_PARAMS['redis_cls'] = 'myproject.RedisClient'

# Если значение равно True, используется операция ``spop`` Redis. Это полезно, чтобы избежать
# повторений в списке начальных URL. В этом случае URL должны добавляться через команду ``sadd``
# иначе будет возникать типовая ошибка от Redis.
REDIS_START_URLS_AS_SET = False  # Количество начальных URL, которое следует за один раз.
#REDIS_START_URLS_BATCH_SIZE = 16

# По умолчанию ключ Redis для начальных URL для RedisSpider и RedisCrawlSpider.
#REDIS_START_URLS_KEY = '%(name)s:start_urls'

Note

Версия 0.3 изменила сериализацию запросов с marshal на cPickle, поэтому сохранённые запросы версии 0.2 не будут работать в версии 0.3.

Запуск примера проекта

Этот пример демонстрирует, как делиться очередью запросов между несколькими экземплярами пауков, что особенно полезно для широкого сбора данных. Для запуска примера выполните следующие шаги:

  1. Установите пакет scrapy_redis в ваш PYTHONPATH

  2. Запустите собирающий паук в первый раз, затем остановите его:

    $ cd example-project
    $ scrapy crawl dmoz
    ... [dmoz] ...
    ^C
    
  3. Запустите собирающий паук снова, чтобы возобновить прерванный сбор данных:

    $ scrapy crawl dmoz
    ... [dmoz] DEBUG: Возобновление сбора данных (9019 запланированных запросов)
    
  4. Запустите один или более дополнительных собирающих пауков scrapy:

    $ scrapy crawl dmoz
    ... [dmoz] DEBUG: Возобновление сбора данных (8712 запланированных запросов)
    
  5. Запустите одного или более рабочих процессов после сбора данных:

    $ python process_items.py dmoz:items -v
    ...
    Обработка: Kilani Giftware (http://www.dmoz.org/Computers/Shopping/Gifts/)
    Обработка: NinjaGizmos.com (http://www.dmoz.org/Computers/Shopping/Gifts/)
    ...
    

Питание паука из Redis -----------------------Класс scrapy_redis.spiders.RedisSpider позволяет паутине читать урлы из Redis. Урлы в очереди Redis будут обрабатываться последовательно. Если первый запрос выдаёт больше запросов, паук будет обрабатывать эти запросы перед получением следующего урла из Redis.Например, создайте файл myspider.py с кодом ниже:

from scrapy_redis.spiders import RedisSpider

class MySpider(RedisSpider):
    name = 'myspider'

    def parse(self, response):
        # выполните какие-либо действия
        pass

Затем:

  1. запустите паука:

    scrapy runspider myspider.py
    
  2. отправьте урлы в Redis:

    redis-cli lpush myspider:start_urls http://google.com
    

Note

Эти пауки зависят от сигнала пауки "idle" для получения начальных урлов, поэтому может быть несколько секунд задержки между временем отправки нового урла и началом работы паука над ним.

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

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

Введение

scrapy распределённый плагин для управления. Развернуть Свернуть
MIT
Отмена

Обновления

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

Участники

все

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

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