Python “如何修复”;Spider必须返回Request、BaseItem、dict或None、got';设置';在……中”;

Python “如何修复”;Spider必须返回Request、BaseItem、dict或None、got';设置';在……中”;,python,web-scraping,scrapy,Python,Web Scraping,Scrapy,我试图创建一个web scraper,从一个网站检索多个表,但不知何故我无法提取它们 我一直在寻找解决方案,但似乎没有什么适合我的需要:( def解析(self,response): 表=[] 对于response.xpath('//table')中的表: 屈服{ tables.append(self.retrieve_table(table)) } 表[0]=self.extract\u table\u info(表[0]+表[1]) 表[2]=self.extract\u table\u i

我试图创建一个web scraper,从一个网站检索多个表,但不知何故我无法提取它们

我一直在寻找解决方案,但似乎没有什么适合我的需要:(

def解析(self,response):
表=[]
对于response.xpath('//table')中的表:
屈服{
tables.append(self.retrieve_table(table))
}
表[0]=self.extract\u table\u info(表[0]+表[1])
表[2]=self.extract\u table\u info(表[2],1)
表[3]=self.extract\u table\u info(表[3],2)
表[4]=self.extract\u table\u info(表[4],3)
公司={'info':表[0],
“oscilations”:表[2][“oscilations”],
“基础”:表[2][“基础”],
“遗产余额数据”:表[3],
“演示性结果数据”:表[4]}
导入json
将open('data.json','w')作为f:
dump(company,f,sure_ascii=False)
它返回的错误是

ERROR: Spider must return Request, BaseItem, dict or None, got 'set'

这是因为该块:

for table in response.xpath('//table'):
    yield {
        tables.append(self.retrieve_table(table))
    }
你为什么需要这里的
yield
?似乎仅仅追加就足以实现你的目标:

for table in response.xpath('//table'):
    tables.append(self.retrieve_table(table))
甚至只是:

tables = response.xpath('//table')

这是因为该块:

for table in response.xpath('//table'):
    yield {
        tables.append(self.retrieve_table(table))
    }
你为什么需要这里的
yield
?似乎仅仅追加就足以实现你的目标:

for table in response.xpath('//table'):
    tables.append(self.retrieve_table(table))
甚至只是:

tables = response.xpath('//table')

某些解析方法返回set对象。您可以发布完整的spider代码或完整的
parse()
method吗?您正在方法顶部生成一个集合。这应该是一个字典吗?某些解析方法返回set对象。您可以发布完整的spider代码或完整的
parse()吗
method?您在方法的顶部生成了一个集合。这应该是一个字典吗?非常好!谢谢!非常好!谢谢