Компоненты на основе Redis для Scrapy.
Распределённое веб-расползование/отслеживание
Вы можете запустить несколько экземпляров пауков, использующих общую очередь Redis. Это идеально подходит для широкого отслеживания множества доменов.
Распределённая пострегистрация
Открытые элементы помещаются в очередь Redis, что позволяет запускать любое количество процессов постобработки, использующих общую очередь элементов.* Встроенные компоненты Scrapy
Шедулер + фильтр повторений, пайплайн элементов, базовые пауки.
Scrapy
>= 1.0redis-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.
Этот пример демонстрирует, как делиться очередью запросов между несколькими экземплярами пауков, что особенно полезно для широкого сбора данных. Для запуска примера выполните следующие шаги:
Установите пакет scrapy_redis в ваш PYTHONPATH
Запустите собирающий паук в первый раз, затем остановите его:
$ cd example-project
$ scrapy crawl dmoz
... [dmoz] ...
^C
Запустите собирающий паук снова, чтобы возобновить прерванный сбор данных:
$ scrapy crawl dmoz
... [dmoz] DEBUG: Возобновление сбора данных (9019 запланированных запросов)
Запустите один или более дополнительных собирающих пауков scrapy:
$ scrapy crawl dmoz
... [dmoz] DEBUG: Возобновление сбора данных (8712 запланированных запросов)
Запустите одного или более рабочих процессов после сбора данных:
$ 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
Затем:
запустите паука:
scrapy runspider myspider.py
отправьте урлы в Redis:
redis-cli lpush myspider:start_urls http://google.com
Note
Эти пауки зависят от сигнала пауки "idle" для получения начальных урлов, поэтому может быть несколько секунд задержки между временем отправки нового урла и началом работы паука над ним.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )