如何从scrapy spider返回数据?
我有点纠结于如何准确地返回scrapy spider的输出,以便在另一个函数或全局范围内使用它。在下面的代码中,我尝试返回res变量,就像您通常对函数所做的那样,但对于Scrapy,它似乎不起作用,而是为列表中的每个URL返回以下错误:返回请求、项或无,获得'str' 谢谢你花时间来研究这件事如何从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 -
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,所以我对它的工作原理有点迷茫!您能否提供一个示例,说明我如何在此实例中定义和使用项?