如何从抓取解析函数中返回分离函数中的数据?



我有一个解析函数,使用 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)

最新更新