用户界面——在python类中处理html内容的一种方法



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

例如,考虑如下页面http://www.the-numbers.com/movies/1999/FIGHT.php。我想处理每个内容,如The Numbers Rating, Rotten Tomatoes, Production Budget, Theatrical Release等,这样我就可以存储每个"键"可能假设的值。

提取的过程为我解决了,我不确定的是关于一个正确的方式来存储这些内容。正如我所说,它们就像"钥匙"一样工作,所以dictionary是一个相当直接的答案。不过,我还是想在我正在构建的类中为每个"键"添加一个成员。

问题是,在访问这些内容的过程中,考虑到代码编写,哪种方法会更好,在这个问题上,哪些是最好的方法。

对于第一种情况,我会像这样:

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 = BeautifulSoup(data)
soup.div
soup.h2
soup.b

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

如果你使用类属性(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在默认定义的其他属性中丢失)

>>> 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']

所以,如果你不需要在你已经创建的"键"列表中迭代,我会使用类属性的方式。

如果你有固定数量的属性,即:你事先知道键值,那么我认为更好的方法是将每个键都作为实例变量,就像你的第二个例子一样。

另一方面,如果事先不知道有哪些"键",或者有太多"键",则可以使用字典之类的容器类型。您可以动态地向字典中添加数据,因此如果有很多数据,也会减少负担。例如,你可以用For…在.."循环中添加数据。

相关内容

  • 没有找到相关文章

最新更新