记一次项目中lambda函数的应用

lambda函数也叫做匿名函数,它允许我们快速定义,并且让代码更简洁

def get(self, url=None, headers=None, encode=False, login_info=None, proxy_ip=None, path=None,  verify=False, retry_times=3, decision=lambda x: True, **kwargs):
        proxies = None
        if proxy_ip:
            proxies = {"http": proxy_ip, "https": proxy_ip}
        res = None
        data = kwargs['params'] if 'params' in kwargs else None
        for i in range(retry_times):
            try:
                flag = True
                res = self.session.get(url=url, headers=headers, proxies=proxies, verify=verify, **kwargs)
                self.save_src(url=url, headers=headers, data=data, res=res, login_info=login_info, path=path, encode=encode)
                flag = False
                if res.status_code != 200:
                    logger.error('crawl_session get: internet error! url: %s' % url)
                if res.status_code >= 500:
                    continue
                elif res.status_code == 200 and not decision(res):
                    continue
                else:
                    break
            except:

这里封装了一下requests的get方法,加入了一个decision参数,该参数是一个匿名函数,retry_times是重试次数,通过匿名函数对res结果进行判断,对爬取结果进行预处理;

def decision(res):
            if 'java.lang.NullPointerException' in res.text:
                return False
            return True

上面的函数是我们在爬虫中定义的一个判断函数,当我们如果知道爬取结果中必定会有某个特殊的返回值时,通过该函数我们可以判断爬取的结果是否是正确的;简单的例子,当有可能我们请求服务端json数据时,返回状态码是200,response的json确是一个空值,

而我们确定该json一定不是空值,这是我们可以通过lambda函数预处理进行重爬。

猜你喜欢

转载自www.cnblogs.com/gjq168/p/9436257.html