Поток Rethinkdb с помощью scrapy

Я ищу простой учебник, объясняющий, как писать элементы в Rethinkdb из scrapy. Эквивалент для MongoDB можно найти здесь.


person crocefisso    schedule 13.04.2016    source источник


Ответы (1)


Вот перевод строки «Записать элементы в MongoDB» для строки с RethinkDB.

Пара замечаний:

  • Я не уверен, где установлены crawler.settings.
  • Документы scrapy говорят, что второй параметр process_item item может быть объектом или dict, поэтому, вероятно, необходимо приведение/преобразование .insert(dict(item)).

import rethinkdb as r

class RethinkDBPipeline(object):

    table_name = 'scrapy_items'

    def __init__(self, rethinkdb_uri, rethinkdb_port, rethinkdb_db):
        self.rethinkdb_uri = rethinkdb_uri
        self.rethinkdb_port = rethinkdb_port
        self.rethinkdb_db = rethinkdb_db

    @classmethod
    def from_crawler(cls, crawler):
        return cls(
            rethinkdb_uri=crawler.settings.get('RETHINKDB_URI'),
            rethinkdb_db=crawler.settings.get('RETHINKDB_DATABASE', 'items')
        )

    def open_spider(self, spider):
        self.conn = r.connect(
            host = self.rethinkdb_uri, 
            port = self.rethinkdb_port,
            db = self.rethinkdb_db)

    def close_spider(self, spider):
        self.conn.close()

    def process_item(self, item, spider):
        r.table(self.table_name).insert(dict(item)).run(self.conn)
        return item
person dalanmiller    schedule 13.04.2016
comment
спасибо за ваш код, к сожалению, я не смог его реализовать. Я думаю, что сначала мне нужно углубить свое понимание RethinkDB... Настройки Crawler задаются в settings.py - person crocefisso; 23.04.2016
comment
@crocefisso, дайте мне знать, если это сработает, я бы хотел опубликовать что-нибудь, показывающее, как настроить RethinkDB с помощью scrapy на основе этого! - person dalanmiller; 25.04.2016
comment
@dalanmiler, в настоящее время я изучаю науку о данных и изучаю Python, Scrapy и RethinkDB с нуля, так как у меня нет опыта работы с компьютерами (кроме хобби). Для некоторого класса я разработал проект, используя RethinkDB и получая данные из scrapy. Поскольку время было ограничено, у меня не было времени, чтобы реализовать конвейер для хранения элементов в RinthinkDB, как я хотел. Я только что закончил использовать функцию импорта rethinkdb. Но для моего следующего проекта (через несколько недель) я планирую попробовать еще раз и более тщательно изучить вопрос. Как только я снова займусь этим, я поделюсь с вами своей находкой. - person crocefisso; 25.04.2016
comment
Приятно слышать @crocefisso! Посетите slack.rethinkdb.com, чтобы присоединиться к нашему каналу Slack, если вам нужна более немедленная помощь. - person dalanmiller; 26.04.2016
comment
В дополнение к RETHINKDB_URI и RETHINKDB_DATABASE я добавил параметр RETHINKDB_PORT в свой RethinkDBPipeline, и он отлично работал. Кроме того, примечание: если вы используете диспетчер пакетов conda, rethinkdb недоступен. Я просто скопировал rethinkdb из каталога Site-Packages из дистрибутива Python (3.5) по умолчанию в каталог Miniconda Site-Packages, и он без вопросов. - person zulumojo; 06.07.2016