2012-12-26 7 views
0

일부 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, ...] 

그리고 1 초 동안 :

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 

어떤 방식으로 사용자에게 친숙하다고 생각하십니까? 이 작업을 수행하는 더 좋은 방법이 있습니까?

답변

0

클래스 속성 (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 

사전에 키의 경우되지 않습니다. 타이핑 실수는 침묵 할 것입니다. 그래서 나는 클래스 속성을 선호합니다. 그러나 사전이 있으면 키 세트를 쉽게 반복 할 수 있습니다. 클래스 인스턴스의 속성 목록을 가져올 수도 있지만, 그 안에는 몇 가지 소음이 있습니다. 당신이 "키"의 목록에서 반복 할 필요가없는 경우 나 class 속성의 방법을 사용하는 것, 사용자가 만든,

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

그래서 (기본적으로 정의 된 다른 속성들 사이에서 잃어버린 키 1 참조).

+0

나는 당신의 제안을 할 것이다! 게시물을 가져 주셔서 감사합니다! – Rubens

0

속성 수가 고정되어있는 경우 (예 : 미리 키 값을 알고 있다면 두 번째 예제에서와 같이이 키들을 인스턴스 변수로 만드는 것이 더 좋은 방법이라고 생각합니다.

반면에 어떤 "키"를 미리 알지 못하거나 너무 많은 키가있는 경우 사전과 같은 컨테이너 유형을 사용할 수 있습니다. 사전에 데이터를 동적으로 추가 할 수 있으므로 데이터가 많으면 부담이 적습니다. 예를 들어 "for ... in .."루프를 사용하여 데이터를 추가 할 수 있습니다.