皮条Python网络爬虫。输出所有XPath的列表,而不是只输出第一个匹配项

2024-04-24 16:01:42 发布

您现在位置:Python中文网/ 问答频道 /正文

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的最大值。请告知。你知道吗

这当然是我认为相关的代码的一部分。如果您想查看其他代码,请访问https://github.com/eliangcs/pystock-crawler/tree/master/pystock_crawler

谢谢你的时间和帮助!你知道吗


Tags: nameselfaddfieldreturnlocalmatchxpath
1条回答
网友
1楼 · 发布于 2024-04-24 16:01:42

这不起作用,因为add\u 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

相关问题 更多 >