我有一个使用scrapy从一个网站获取一些数据的解析函数,这个函数将一些数据传递给另一个函数,这个函数,我无法返回输出!,我尝试了打印它工作但我需要使用返回以获取json文件中的数据。 如何制作打印的func返回项?
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中有一些操作,然后将它传递到另一个功能&#34; prin func&#34;
def print_func(city,days, tr):
if len(days)==0:
item=PropertiesItem()
item['Name']= ""
item['City']= city
item['State']= "CA"
return item
print_func不会返回任何内容,有人可以告诉我为什么吗?
答案 0 :(得分:0)
Scrapy检查解析函数的返回值。现在,如果你在里面调用一个函数并丢弃它返回值,那么你就不会从解析函数中返回任何东西
所以你的代码应该从
改变for tr in tr_data:
func_2(tr)
到
for tr in tr_data:
yield func_2(tr)
这将确保将任何项func_2
返回传递给scrapy框架。同样在您的func_2函数中,您将调用print_func
,因此您需要捕获它的返回值并将其传递回调用函数
def func_2(....):
....
item = print_func(...)
...
return item
您需要在解析函数中获取值,然后从那里获取它。从任何函数返回它都不起作用。
答案 1 :(得分:0)
对于 parse 方法中的任何其他函数,请这样编写:
def parse(self, response):
for req in self.call_your_function(self, param):
yield req
def parse(self, response):
yield from self.call_your_function(self, param)