python-将scrapy日志流输出到websocket
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-将scrapy日志流输出到websocket,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2101字,纯文字阅读大概需要4分钟。
内容图文
我正在尝试构建一个通过websocket消息请求时将运行Scrapy Web Spider的API.
我想将日志记录输出转发到websocket客户端,以便您了解-有时运行时间很长的过程中发生的情况.完成后,我还将发送抓取的结果.
由于可以在进程中运行Scrapy,因此我想做到这一点.我在这里找到了一种将外部流程流式传输到websocket的解决方案,但是如果可以在服务器中运行Scrapy,那似乎是不对的.
https://tomforb.es/displaying-a-processes-output-on-a-web-page-with-websockets-and-python
我可以想象有两种方法可以在Twisted中实现此功能:以某种方式使用LogObserver,或定义LogHandler(可能是带有StringIO的StreamHandler),然后在Twisted中使用autobahn.websocket类(如WebSocketServerProtocol)以某种方式处理Stream.
现在我很困,不知道如何连接两端.
有人可以提供一个简短的示例,说明如何将日志输出从扭曲的日志记录(如果可能的话避免使用文件)流式传输到Websocket客户端?
解决方法:
我设法以某种方式自己解决了这个问题,并想让您知道我是如何做到的:
基本思想是拥有一个可以远程调用的流程,并将流日志输出到客户端(通常是浏览器).
我没有自己构建所有令人讨厌的细节,而是决定使用autobahn.ws和crossbar.io,通过Wamp protocol提供pubsub和rpc,本质上只是websockets上的JSON-正是我计划构建的东西,只是更高级了!
这是一个非常基本的示例:
from twisted.internet.defer import inlineCallbacks
from autobahn.twisted.wamp import ApplicationSession
from example.spiders.basic_spider import BasicSpider
from scrapy.crawler import CrawlerRunner
from scrapy.utils.log import configure_logging
from scrapy.utils.project import get_project_settings
import logging
class PublishLogToSessionHandler(logging.Handler):
def __init__(self, session, channel):
logging.Handler.__init__(self)
self.session = session
self.channel = channel
def emit(self, record):
self.session.publish(self.channel, record.getMessage())
class AppSession(ApplicationSession):
configure_logging(install_root_handler=False)
@inlineCallbacks
def onJoin(self, details):
logging.root.addHandler(PublishLogToSessionHandler(self, 'com.example.crawler.log'))
# REGISTER a procedure for remote calling
def crawl(domain):
runner = CrawlerRunner(get_project_settings())
runner.crawl("basic", domain=domain)
return "Running..."
yield self.register(crawl, 'com.example.crawler.crawl')
内容总结
以上是互联网集市为您收集整理的python-将scrapy日志流输出到websocket全部内容,希望文章能够帮你解决python-将scrapy日志流输出到websocket所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。