Tôi xác định một nhà xuất khẩu mặt hàng sẽ đẩy các mục vào hàng đợi thư. Dưới đây là mã.Xuất khẩu tùy chỉnh phế liệu
from scrapy.contrib.exporter import JsonLinesItemExporter
from scrapy.utils.serialize import ScrapyJSONEncoder
from scrapy import log
from scrapy.conf import settings
from carrot.connection import BrokerConnection, Exchange
from carrot.messaging import Publisher
log.start()
class QueueItemExporter(JsonLinesItemExporter):
def __init__(self, **kwargs):
log.msg("Initialising queue exporter", level=log.DEBUG)
self._configure(kwargs)
host_name = settings.get('BROKER_HOST', 'localhost')
port = settings.get('BROKER_PORT', 5672)
userid = settings.get('BROKER_USERID', "guest")
password = settings.get('BROKER_PASSWORD', "guest")
virtual_host = settings.get('BROKER_VIRTUAL_HOST', "/")
self.encoder = settings.get('MESSAGE_Q_SERIALIZER', ScrapyJSONEncoder)(**kwargs)
log.msg("Connecting to broker", level=log.DEBUG)
self.q_connection = BrokerConnection(hostname=host_name, port=port,
userid=userid, password=password,
virtual_host=virtual_host)
self.exchange = Exchange("scrapers", type="topic")
log.msg("Connected", level=log.DEBUG)
def start_exporting(self):
spider_name = "test"
log.msg("Initialising publisher", level=log.DEBUG)
self.publisher = Publisher(connection=self.q_connection,
exchange=self.exchange, routing_key="scrapy.spider.%s" % spider_name)
log.msg("done", level=log.DEBUG)
def finish_exporting(self):
self.publisher.close()
def export_item(self, item):
log.msg("In export item", level=log.DEBUG)
itemdict = dict(self._get_serialized_fields(item))
self.publisher.send({"scraped_data": self.encoder.encode(itemdict)})
log.msg("sent to queue - scrapy.spider.naukri", level=log.DEBUG)
Tôi đang gặp một số sự cố. Các mục không được gửi đến hàng đợi. Ive đã thêm thông tin sau vào cài đặt của tôi:
FEED_EXPORTERS = {
"queue": 'scrapers.exporters.QueueItemExporter'
}
FEED_FORMAT = "queue"
LOG_STDOUT = True
Mã không gây ra bất kỳ lỗi nào và tôi không thể thấy bất kỳ thông báo ghi nhật ký nào. Im tại trí thông minh của tôi kết thúc về cách gỡ lỗi này.
Mọi trợ giúp sẽ được đánh giá cao.
Tôi nghĩ rằng viết một đường ống mục sẽ đơn giản hơn cho mục đích này, và liên quan đến ít mã boilerplate, đó là một nguồn tiềm năng cho những sai lầm. Vì vậy, tôi sẽ refactor mã của bạn để làm việc như một đường ống dẫn, thay vì một nhà xuất khẩu mặt hàng tùy chỉnh. Xem [doc đường dẫn tài liệu] (http://doc.scrapy.org/en/latest/topics/item-pipeline.html) –
Tôi đã viết một đường ống dẫn, nhưng suy nghĩ của tôi là, vì đây là cách tôi muốn đầu ra của tôi từ các scraper, các nhà xuất khẩu sẽ là một nơi tốt hơn để đặt nó. – zsquare
@zsquare, có thành công nào trong vấn đề này không? Tôi biết đó là một bài cũ nhưng bạn đã làm gì? – Medeiros