Я ищу простой учебник, объясняющий, как писать элементы в Rethinkdb из scrapy. Эквивалент для MongoDB можно найти здесь.
Поток Rethinkdb с помощью scrapy
Ответы (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
спасибо за ваш код, к сожалению, я не смог его реализовать. Я думаю, что сначала мне нужно углубить свое понимание RethinkDB... Настройки Crawler задаются в settings.py
- person crocefisso; 23.04.2016
@crocefisso, дайте мне знать, если это сработает, я бы хотел опубликовать что-нибудь, показывающее, как настроить RethinkDB с помощью scrapy на основе этого!
- person dalanmiller; 25.04.2016
@dalanmiler, в настоящее время я изучаю науку о данных и изучаю Python, Scrapy и RethinkDB с нуля, так как у меня нет опыта работы с компьютерами (кроме хобби). Для некоторого класса я разработал проект, используя RethinkDB и получая данные из scrapy. Поскольку время было ограничено, у меня не было времени, чтобы реализовать конвейер для хранения элементов в RinthinkDB, как я хотел. Я только что закончил использовать функцию импорта rethinkdb. Но для моего следующего проекта (через несколько недель) я планирую попробовать еще раз и более тщательно изучить вопрос. Как только я снова займусь этим, я поделюсь с вами своей находкой.
- person crocefisso; 25.04.2016
Приятно слышать @crocefisso! Посетите slack.rethinkdb.com, чтобы присоединиться к нашему каналу Slack, если вам нужна более немедленная помощь.
- person dalanmiller; 26.04.2016
В дополнение к RETHINKDB_URI и RETHINKDB_DATABASE я добавил параметр RETHINKDB_PORT в свой RethinkDBPipeline, и он отлично работал. Кроме того, примечание: если вы используете диспетчер пакетов conda, rethinkdb недоступен. Я просто скопировал rethinkdb из каталога Site-Packages из дистрибутива Python (3.5) по умолчанию в каталог Miniconda Site-Packages, и он без вопросов.
- person zulumojo; 06.07.2016