我有一个解析函数,使用 scrapy 从网站获取一些数据,这个函数将一些数据传递给另一个函数,这个函数,我无法返回输出!,我尝试了打印它工作,但我需要使用 return 来获取 JSON 文件中的数据。 如何制作打印的函数退货物品?
def parse(self, response):
all_tr= list()
for tr in response.xpath('//tr').extract():
all_tr.append(tr)
tr_data = list()
city_tr = list()
for tr in all_tr:
if re.findall(r'class="city".+name.+?<', tr):
city_tr.append(tr)
else:
pass
c= 0
const =1
while const ==1:
try:
start=city_tr[c]
end= city_tr[c+1]
indexStart=all_tr.index(start)
indexEnd=all_tr.index(end)
tr_data.append(all_tr[indexStart:indexEnd])
c=c+1
except IndexError:
const=2
tr_data.append(all_tr[all_tr.index(start):])
for tr in tr_data:
func_2(tr)
我在func_2中有一些操作,然后将其传递给另一个fnction"prin func">
def print_func(city,days, tr):
if len(days)==0:
item=PropertiesItem()
item['Name']= ""
item['City']= city
item['State']= "CA"
return item
print_func不退货,谁能告诉我为什么?
Scrapy 检查解析函数的返回值。现在,如果您在其中调用一个函数并丢弃它返回值,那么您不会从解析函数中返回任何内容,
例如所以你的代码应该从
for tr in tr_data:
func_2(tr)
自
for tr in tr_data:
yield func_2(tr)
这将确保返回的任何项目func_2
传递到抓取框架。同样在你的func_2函数中,你会调用print_func
,所以你需要捕获它返回值并将其传递回调用函数
def func_2(....):
....
item = print_func(...)
...
return item
您需要在解析函数中获取值,然后从那里生成它。只是从任何函数返回它都不起作用。
对于解析方法中的任何其他函数,可以这样写:
def parse(self, response):
for req in self.call_your_function(self, param):
yield req
或者,在 Python 3 中:
def parse(self, response):
yield from self.call_your_function(self, param)