2015-09-04 83 views
1
revenues_in = MapCompose(MatchEndDate(float)) 

revenues_out = Compose(imd_filter_member, imd_mult, imd_max) 


def add_xpath(self, field_name, xpath, *processors, **kw): 

    values = self._get_values(xpath, **kw) 

    self.add_value(field_name, values, *processors, **kw) 

    return len(self._values[field_name]) 


def add_xpaths(self, name, paths): 

    for path in paths: 

     match_count = self.add_xpath(name, path) 

     if match_count > 0: 

      return match_count 

    return 0 



self.add_xpaths('revenues', [ 

     '//us-gaap:Revenues', 

     '//us-gaap:SalesRevenueNet', 

     '//us-gaap:SalesRevenueGoodsNet', 

     '//us-gaap:SalesRevenueServicesNet', 

     '//us-gaap:RealEstateRevenueNet', 

     '//*[local-name()="NetRevenuesIncludingNetInterestIncome"]', 

     '//*[contains(local-name(), "TotalRevenues") and contains(local-name(), "After")]', 

     '//*[contains(local-name(), "TotalRevenues")]', 

     '//*[local-name()="InterestAndDividendIncomeOperating" or local-name()="NoninterestIncome"]', 

     '//*[contains(local-name(), "Revenue")]' 

    ]) 

當前,代碼只是吐出xpath列表中的第一個匹配項。我希望它能返回匹配的所有xpath中的最大值。請指教。Scrapy - python - 網絡爬蟲。所有xpath的輸出列表,而不是僅第一個匹配

這當然是我認爲是相關的代碼的一個小節。如果你想看到任何額外的代碼,請訪問https://github.com/eliangcs/pystock-crawler/tree/master/pystock_crawler

謝謝你的時間和幫助!

回答

1

這不起作用,因爲add_xpaths函數在每遍循環結束時返回一個值。這會導致循環在第一次運行後退出。相反,您需要將計數存儲在一個變量中,並在循環整個數據結構時返回它。

取而代之的是:

def add_xpaths(self, name, paths): 
    for path in paths: 
     match_count = self.add_xpath(name, path) 
     if match_count > 0: 
      return match_count 
    return 0 

試試這個:

def add_xpaths(self, name, paths): 
    match_count = 0 
    for path in paths: 
     match_count += self.add_xpath(name, path) 
    return match_count