如何从scrapy spider返回数据?

如何从scrapy spider返回数据?,scrapy,web-crawler,crawler4j,Scrapy,Web Crawler,Crawler4j,我有点纠结于如何准确地返回scrapy spider的输出,以便在另一个函数或全局范围内使用它。在下面的代码中,我尝试返回res变量,就像您通常对函数所做的那样,但对于Scrapy,它似乎不起作用,而是为列表中的每个URL返回以下错误:返回请求、项或无,获得'str' 谢谢你花时间来研究这件事 import scrapy from scrapy.crawler import CrawlerProcess import logging #disable logging for scrapy -

我有点纠结于如何准确地返回scrapy spider的输出,以便在另一个函数或全局范围内使用它。在下面的代码中,我尝试返回res变量,就像您通常对函数所做的那样,但对于Scrapy,它似乎不起作用,而是为列表中的每个URL返回以下错误:返回请求、项或无,获得'str'

谢谢你花时间来研究这件事

import scrapy
from scrapy.crawler import CrawlerProcess
import logging

#disable logging for scrapy - by default verbose as hell
logging.getLogger('scrapy').propagate = False

#create the spider
class feedSpider(scrapy.Spider):

    #the spider needs a name
    name="scraper"

    # define the sources we're about to crawl
    def start_requests(self):
        urls = [feed for feed in feeds]
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    # parse the response
    def parse(self, response):

        # Select the first headline from each RSS feed
        res = response.xpath('//item/title/text()').get()
        return res

process = CrawlerProcess({
    'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'
})


process.crawl(feedSpider)
 # the script will block here until the crawling is finished
process.start()
对于我列表中的每个URL,改为以下错误:返回请求、项或无,得到“str”

嗯,这很重要,不是吗:-)

你真正想要的是一个。相信我!选择您首选的定义项目的方式。让爬虫继续前进,生产物品。不要把时间浪费在其他事情上

将项目数据的后处理放在其他地方。系统中有输入和输出处理器,还有一个非常酷的概念

但同样,你想从一个项目开始


祝你好运,玩得开心

解决这些问题的更简单方法是返回字典而不是文字数据

data={}
data['title']=response.xpath('//item/title/text()).get()
产量数据
如果您想以非阻塞方式从pass函数返回多个内容,yield将是理想的选择。
如果您只有一件东西要返回,那么yield/return就无关紧要了。

您可以返回response.xpath(“//item/title/text()”)并在这个函数之外调用.get()?刚刚返回了,错误仍然存在。Spider必须返回请求、项或无,获得“SelectorTanks”,这是我第一次使用Scrapy,所以我对它的工作原理有点迷茫!您能否提供一个示例,说明我如何在此实例中定义和使用项?