2011-08-29 3 views
0
내가 배열 인덱스가 존재하는지 확인하는 방법을 이해 생각하지 않는다

...DICT 지수의 BeautifulSoup로와

for tag in soup.findAll("input"): 
      print tag['type'] 
      if 'type' in tag: 
       print "b" 

출력 "만약 DICT에서 X"

2255 
text 
hidden 
text 
text 
text 
Traceback (most recent call last): 
    File "/home//workspace//src/x.py", line 268, in <module> 
    print tag['type'] 
    File "/home//workspace//src/BeautifulSoup.py", line 601, in __getitem__ 
    return self._getAttrMap()[key] 
KeyError: 'type' 

가 왜 이제까지 'b'를 출력하지 않습니까?

답변

2

BeautifulSoup Tagdict이 아닙니다. 때로는 특정 방식으로 하나처럼 작동합니다 ([] 표기법을 사용하면 속성의 값을 가져옵니다). 그러나 다른 방법으로는 표시하지 않습니다. in (Tag)은 태그가 해당 태그의 직접 하위 태그인지 확인합니다. 속성을 검사하지 않습니다. 왜 지금까지 'B'를 출력하지 않습니다

if not tag.get('type', None): 
    pass # type is empty or nonexistent 
1

:

대신, 당신은 이런 식으로 뭔가를 할 수 있을까?

findAll에서 반환 된 태그는 실제로는 그렇지 않을 때 dict라고 가정합니다. 사용중인 BeautifulSoup 라이브러리에는 자체 맞춤 클래스가 있습니다.이 경우 BeautifulSoup.Tag는 사전처럼 많이 작동하지만 그렇지 않습니다.

다음

이 체크 아웃 :

 
    >>> doc = ['<html><head><title>Page title</title></head>', 
    ...  '<body><p id="firstpara" align="center">This is paragraph <b>one</b>.', 
    ...  '<p id="secondpara" align="blah">This is paragraph <b>two</b>.', 
    ...  '</html>'] 
    >>> soup = BeautifulSoup(''.join(doc)) 
    >>> tag = soup.findAll("p")[0] 
    >>> type(tag) 
    class 'BeautifulSoup.Tag'> 
    >>> isinstance(tag, dict) 
    False 

을 실제로,이 경우에, 직접적인 아이의 목록을 일부 다른 (도메인 별) 동작을 받고있어 사전인가 아니다 이후 (태그 즉시에 포함 '색인 생성'태그). 당신이 입력 태그 속성 유형이 있는지 알고 싶어처럼

그것은 보이는, 그래서 BeautifulSoup로 문서에 따라 당신은 tag.attrs 및 attrMap를 사용하여 태그의 속성을 나열 할 수 있습니다.

 
    >>> tag.attrs 
    [(u'id', u'firstpara'), (u'align', u'center')] 
    >>> tag.attrMap 
    {u'align': u'center', u'id': u'firstpara'} 
    >>> 'id' in tag.attrMap 
    True 

BeautifulSoup은 정말 도움이되는 라이브러리이지만 원하는 결과를 얻으려면 조금만 놀아야합니다. 대화식 콘솔에서 수업을하면서 시간을 보내고 도움말 (someobject) 구문을 사용하여 게임 내용과 방법을 확인하십시오.

관련 문제