一种在python类中处理html内容的方法

一种在python类中处理html内容的方法,python,user-interface,user-friendly,Python,User Interface,User Friendly,我正在处理一些html解析,我很难定义一种方法来处理所提取的信息 例如,考虑这样的页面。我想处理每一个内容,比如数字评级,烂西红柿,生产预算,戏剧版,以及其他内容,以便存储每个“关键点”可能采用的值 提取的过程对我来说已经解决了,我不确定的是如何正确地存储这些内容。正如我所说,它们就像“钥匙”一样工作,所以字典是一个非常直接的答案。不过,我还是想为我正在构建的类中的每个“键”添加一个成员 问题是,考虑到代码编写,在访问这些内容的过程中,哪种方法效果更好,以及这些方法是否是解决这个问题的最佳方法

我正在处理一些html解析,我很难定义一种方法来处理所提取的信息

例如,考虑这样的页面。我想处理每一个内容,比如
数字评级
烂西红柿
生产预算
戏剧版
,以及其他内容,以便存储每个“关键点”可能采用的值

提取的过程对我来说已经解决了,我不确定的是如何正确地存储这些内容。正如我所说,它们就像“钥匙”一样工作,所以
字典
是一个非常直接的答案。不过,我还是想为我正在构建的类中的每个“键”添加一个成员

问题是,考虑到代码编写,在访问这些内容的过程中,哪种方法效果更好,以及这些方法是否是解决这个问题的最佳方法

对于第一种情况,我会说:

class Data:

    def __init__(self):
        self.data = dict()

    def adding_data(self):
        self.data["key1"] = (val1, val2)
        self.data["key2"] = val3
        self.data["key3"] = [val4, val5, val6, ...]
对于第二个问题:

class Data:

    def adding_data(self):
        self.key1 = (val1, val2)
        self.key2 = val3
        self.key3 = [val4, val5, val6, ...]
我之所以考虑这一点,是因为我使用的是
BeautifulSoup
API,我非常熟悉它们处理结果“soup”上每个标记的方式


你认为哪种方式更方便用户?有更好的方法吗?

如果您有固定数量的属性,即您事先知道键值,那么我认为更好的方法是将这些键中的每一个作为实例变量,如第二个示例中所示


另一方面,如果您不知道您将事先拥有哪些“键”,或者它们太多,那么您可以使用类似于字典的容器类型。您可以动态地将数据添加到字典中,这样,如果有许多数据,那么它的负担也会更小。例如,您可以使用“For…in..”循环来添加数据

如果使用类属性(self.key1…),静态检查代码的工具(如pylint)将向您显示未使用和未定义的变量,因此键入错误

class toy(object):
    pass

a = toy()
a.key1 = "hello world"
print a.key10
Pylint运行:

> pylint toto.py
************* Module toto
C:  1,0: Black listed name "toto"
C:  1,0: Missing docstring
C:  1,0:toy: Invalid name "toy" (should match [A-Z_][a-zA-Z0-9]+$)
C:  1,0:toy: Missing docstring
W:  5,0: Attribute 'key1' defined outside __init__
R:  1,0:toy: Too few public methods (0/2)
C:  4,0: Invalid name "a" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)
E:  6,6: Instance of 'toy' has no 'key10' member
字典里的键不是这样的。键入错误将消失,这就是为什么我更喜欢类属性。然而,如果你有一个字典,你可以很容易地遍历这组键。虽然您还可以获得类实例的属性列表,但其中会有一些杂音。(请参见默认定义的其他属性中的key1 lost)


因此,如果您不需要在已创建的“键”列表中迭代,我将使用class属性方式。

我接受您的建议!谢谢你的帖子!
> pylint toto.py
************* Module toto
C:  1,0: Black listed name "toto"
C:  1,0: Missing docstring
C:  1,0:toy: Invalid name "toy" (should match [A-Z_][a-zA-Z0-9]+$)
C:  1,0:toy: Missing docstring
W:  5,0: Attribute 'key1' defined outside __init__
R:  1,0:toy: Too few public methods (0/2)
C:  4,0: Invalid name "a" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)
E:  6,6: Instance of 'toy' has no 'key10' member
>>> class toy(object):
...     pass
... 
>>> a = toy()
>>> a.key1 = "hello world"
>>> dir(a)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'key1']