Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
向python代码添加另一个用例_Python - Fatal编程技术网

向python代码添加另一个用例

向python代码添加另一个用例,python,Python,我有以下Python类 from body_parser import Extractor import re class FEOProcessor(object): CHECKS = [ ('Standard JavaScript Inlining Optimization', ('EMBED_JAVASCRIPT',), 'check_js_inlining'), ('HTML5 Advanced Cache', ('JAVASCRIPT_HTML

我有以下Python类

from body_parser import Extractor
import re

class FEOProcessor(object):

    CHECKS = [
        ('Standard JavaScript Inlining Optimization', ('EMBED_JAVASCRIPT',), 'check_js_inlining'),
        ('HTML5 Advanced Cache', ('JAVASCRIPT_HTML5_CACHE', 'CSS_HTML5_CACHE'), 'check_html5_advanced_cache'),
        ('Cookieless Resource Domain', ('RENAME_JAVASCRIPT', 'RENAME_CSS'), 'check_cookieless_resource_domain'),
        ('Minificatiopn of JS', ('MINIFY_JAVASCRIPT',), 'check_js_minifaction'),
        ('File Versioning', ('RENAME_JAVASCRIPT', 'RENAME_IMAGE', 'RENAME_CSS'), 'check_file_versioning'),
        ('Small Image Embedding', ('EMBED_IMAGE',), 'check_small_image_embedding'),
        ('Responsive Image Loading', ('RESPONSIVE_IMAGES',), 'check_responsive_image_loading'),
        ('Asynchronous JS and CSS Loading', ('ASYNC_JAVASCRIPT',), 'check_async_js_and_css_loading'),
        ('JS Pre-Execution', ('PRE_EXECUTE_JAVASCRIPT',), 'check_js_pre_execution'),
        ('EDGESTART', ('EDGESTART',), 'check_edgestart'),
        ('Invoke Click OnTouch', ('BlzFastClick',), 'check_click'),
        ('Cellular Connection Keep-Alive', ('blzEnableMobileHeartbeat',), 'check_cell'),
    ]

    def __init__(self):
        self.parser = Extractor()
        self.result = dict((k, False) for k,_,_ in self.CHECKS)

    for _, keys, name in CHECKS:
        locals()[name] = lambda self, result, _keys=keys: all(result.get(k, 0)>0 for k in _keys)


    def process_feo_debug_output(self, analysis_id, url):
        feed = self.parser.start_parser(analysis_id, url, True)
        result = self.get_feo_tags(feed)
        for name, _, func in self.CHECKS:
            self.result[name] = (False, True)[getattr(self,func)(result)]
        return self.result

    def get_feo_tags(self, feed):
        result = {}
        tag_list = re.findall(r'(?:TextTransApplied):\s*((?:(?:[A-Z]+(?:_[A-Z\d]+)+)?\(\d+\)\s*(?:,\s*|;))*)', str(feed))
        for tag in tag_list:
            for element in tag.split(","):
                index = element.index('(')
                if element[:index].strip():
                    result[element[:index].strip()] = (element.split("(")[1].rstrip(");"))
        return result

    def check_edgestart(self, result):
        return 1 if 'EDGESTART' in result.keys() else 0

    def check_click(self, result):
        return 1 if 'BlzFastClick' in result.keys() else 0

    def check_cell(self, result):
        return 1 if 'blzEnableMobileHeartbeat' in result.keys() else 0
它返回一个基于检查的
True
False
值列表。我需要一个基于
feed
的附加检查,该feed是
get\u feo\u tags
方法的输入

另一个需要合并的检查是

for img in feed.find_all('img', attrs={'data-blzsrc': True, 'src': lambda x: 'data' not in x}):
     #append to the result dict {On Demand Image Loading: True}

如何在当前设置中执行此操作。

如果
soup
feed
相同,您可以尝试以下操作:

#!/usr/bin/env python
#-*- coding:utf-8 -*-

from body_parser import Extractor
import re

class FEOProcessor(object):

    CHECKS = [
        ('Standard JavaScript Inlining Optimization', ('EMBED_JAVASCRIPT',), 'check_js_inlining'),
        ('HTML5 Advanced Cache', ('JAVASCRIPT_HTML5_CACHE', 'CSS_HTML5_CACHE'), 'check_html5_advanced_cache'),
        ('Cookieless Resource Domain', ('RENAME_JAVASCRIPT', 'RENAME_CSS'), 'check_cookieless_resource_domain'),
        ('Minificatiopn of JS', ('MINIFY_JAVASCRIPT',), 'check_js_minifaction'),
        ('File Versioning', ('RENAME_JAVASCRIPT', 'RENAME_IMAGE', 'RENAME_CSS'), 'check_file_versioning'),
        ('Small Image Embedding', ('EMBED_IMAGE',), 'check_small_image_embedding'),
        ('Responsive Image Loading', ('RESPONSIVE_IMAGES',), 'check_responsive_image_loading'),
        ('Asynchronous JS and CSS Loading', ('ASYNC_JAVASCRIPT',), 'check_async_js_and_css_loading'),
        ('JS Pre-Execution', ('PRE_EXECUTE_JAVASCRIPT',), 'check_js_pre_execution'),
        ('EDGESTART', ('EDGESTART',), 'check_edgestart'),
        ('Invoke Click OnTouch', ('BlzFastClick',), 'check_click'),
        ('Cellular Connection Keep-Alive', ('blzEnableMobileHeartbeat',), 'check_cell'),
        ('On Demand Image Loading', ('img',), 'check_img'),
    ]

    def __init__(self):
        self.parser = Extractor()
        self.result = dict((k, False) for k,_,_ in self.CHECKS)

    for _, keys, name in CHECKS:
        locals()[name] = lambda self, result, _keys=keys: all(result.get(k, 0)>0 for k in _keys)


    def process_feo_debug_output(self, analysis_id, url):
        feed = self.parser.start_parser(analysis_id, url, True)
        # this works only if feed is the same as soup as you said
        result = self.get_feo_tags(feed)
        for name, _, func in self.CHECKS:
            if name == 'On Demand Image Loading':
                self.result[name] = (False, True)[getattr(self,func)(feed)]
            else:
                self.result[name] = (False, True)[getattr(self,func)(result)]
        return self.result

    def get_feo_tags(self, feed):
        result = {}
        tag_list = re.findall(r'(?:TextTransApplied):\s*((?:(?:[A-Z]+(?:_[A-Z\d]+)+)?\(\d+\)\s*(?:,\s*|;))*)', str(feed))
        for tag in tag_list:
            for element in tag.split(","):
                index = element.index('(')
                if element[:index].strip():
                    result[element[:index].strip()] = (element.split("(")[1].rstrip(");"))
        return result

    def check_edgestart(self, result):
        return 1 if 'EDGESTART' in result.keys() else 0

    def check_click(self, result):
        return 1 if 'BlzFastClick' in result.keys() else 0

    def check_cell(self, result):
        return 1 if 'blzEnableMobileHeartbeat' in result.keys() else 0

    def check_img(self, feed):
        return 1 if feed.find_all('img', attrs={'data-blzsrc': True, 'src': lambda x: 'data' not in x}) else 0

这和口述有什么关系?抱歉编辑了问题什么是汤?你想用img做什么?soup和feed是一样的,如果特定的检查通过了,我必须更新我的结果dict为
{On-Demand Image-load:True}
@user567797这一个与你上次问的不同。您需要提供find\u all正在执行的操作。这会引发一个错误,说明
'dict'对象没有属性“find\u all”