gpt4 book ai didi

python - 将 scrapy 日志输出流式传输到 websocket

转载 作者:太空狗 更新时间:2023-10-30 02:29:09 24 4
gpt4 key购买 nike

我正在尝试构建一个 API,该 API 将在通过 websocket 消息请求时运行 Scrapy 网络蜘蛛。

我想将日志记录输出转发到 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,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33959986/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com