Scrapy получает сообщение от RabbitMQ, затем сохраняет проанализированные данные в MongoDB - PullRequest
0 голосов
/ 30 ноября 2018

Я хочу разрешить Scrapy получить сообщение от RabbitMQ, а затем сохранить проанализированные данные в MongoDB.

Я использую scrapy-rabbitmq-link , чтобы получить сообщениеот RabbitMQ прямо сейчас.У меня есть следующие настройки в settings.py

# Enables scheduling storing requests queue in rabbitmq.
SCHEDULER = "scrapy_rabbitmq_link.scheduler.SaaS"

# Provide AMQP connection string
RABBITMQ_CONNECTION_PARAMETERS = 'amqp://admin:password@localhost:5672/'

# Set response status codes to requeue messages on
SCHEDULER_REQUEUE_ON_STATUS = [500]

# Middleware acks RabbitMQ message on success
DOWNLOADER_MIDDLEWARES = {
    'scrapy_rabbitmq_link.middleware.RabbitMQMiddleware': 10
}

Текущий паук

class TestSpider(scrapy.Spider):
    name = "TestSpider"
    amqp_key = 'news'

    def _make_request(self, mframe, hframe, body):
        print('######## url ##########')
        item = json.loads(body)
        articleLink = item['url']
        print(articleLink)
        return scrapy.Request(articleLink, callback=self.parse)

    def parse(self, response):
        print('######## Parse article ##########')
        articleBody = response.css('div.StandardArticleBody_body ::text').extract_first()
        print('######## Article body ##########')
        print(articleBody)

        yield {
            'body': articleBody
        }  

В настоящее время я могу получить сообщение от RabbitMQ, но не знаю, как сохранить элементв MongoDB

Если я добавлю

item = TutorialItem()
item['title'] = article.css('h3.storytitle::text').extract_first().strip()
item['body'] = articleBody.strip()
yield item

в функции parse паука и сохраню элемент в MongoDB в линиях.Я обнаружил, что всегда добавлять новые сообщения в RabbitMQ вместо того, чтобы потреблять сообщения.Я чувствую, что это связано с SCHEDULER = "scrapy_rabbitmq_link.scheduler.SaaS"

Есть предложения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...