【发布时间】:2021-08-30 15:19:21
【问题描述】:
我尝试运行 Scrapy spider 和一些 SDK 调用到 Django 中的另一个资源。主要思想是在准备好后将它们两者的结果收集到一个列表中并将其输出以供查看。 SDK 以同步方式工作,因此没有问题。但我无法从蜘蛛那里得到结果。任何人都可以指出正确的解决方案吗?
我运行解析的代码如下所示:
class scrapyParser(Parser):
def __init__(self, keywords=None, n_items=None):
super().__init__(keywords, n_items)
def parse(self):
result = []
if not super().parse():
return False
crawler = UrlCrawlerScript(Parser1, result, [BASE_PATH + self.keywords])
crawler.start()
crawler.join()
print(crawler.outputResponse)
return result[:self.n_items]
class UrlCrawlerScript(Process):
def __init__(self, result, urls):
Process.__init__(self)
settings = get_project_settings()
self.crawler = Crawler(spider, settings=settings)
self.crawler.signals.connect(reactor.stop, signal=signals.spider_closed)
self.spider = spider
self.urls = urls
self.outputResponse = result
@inlineCallbacks
def cycle_run(self):
yield self.crawler.crawl(Parser1, outputResponse=self.outputResponse, start_urls=self.urls)
returnValue(self.outputResponse)
def run(self):
result = self.cycle_run()
result.addCallback(print)
reactor.run()
解析代码很简单,有这样一个模板:
import scrapy
class Parser1(scrapy.Spider):
name = 'items'
allowed_domains = ['domain.com']
def parse(self, response):
...
# parsing page
for item in row_data:
scraped_info = {
...
}
self.outputResponse.append(scraped_info)
所以我无法在解析的输出中得到任何东西。它返回一个空列表。但是,我在 Python 和 Twisted 框架中的异步调用还处于起步阶段。很有可能我只是搞砸了。
【问题讨论】:
标签: python-3.x scrapy twisted