如何从scrapy解析函数中分离函数返回数据?

时间:2017-08-18 17:49:56

标签: python scrapy return scrapy-spider yield

我有一个使用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不会返回任何内容,有人可以告诉我为什么吗?

2 个答案:

答案 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

,或者在Python 3中:

def parse(self, response):    
    yield from self.call_your_function(self, param)