2013-06-20 4 views
2

페이지의 모든 img 태그를 검색하고 특정 너비의 그림 만 잡고 싶을 때 BeautifulSoup을 사용하여 구문 분석 스크립트를 작성합니다.HTML 구문 분석의 태그

여기에 태그의 예 :

<img 
    alt="" 
    src="//upload.wikimedia.org/wikipedia/en/thumb/a/a9/Example.jpg/111px-Example.jpg" 
    width="111" 
    height="120" 
/> 

문제는 모든 img 태그가 width 속성을 가지고있다. width 속성이있는 img 태그에만 액세스하고 싶습니다.

images= soup.findAll("img") 
listimages= [] 
for img in images: 
    if img['width']!==None: 
     listimages.append(img) 

이 작동하지 않습니다

은 지금까지 나는의 라인을 따라 뭔가가있다. width 속성이없는 경우 NoneType이 표시되지 않는 것으로 보입니다. 그럼 None이 아니라면 뭐라 구요? 위의 링크에서

soup.findAll("img", width=True) 

:

+0

,'위의 코드가 있어야한다에 ==''='구문 오류가 발생하지 않도록!. –

+0

장래에리스트 comprehension으로 해결할 수없는 비슷한 문제가 생기면'img.get ('width')'를 시도해보십시오. 그러한 attr가 없으면 예상대로 None을 반환합니다. – OregonTrail

답변

-1
[img for img in soup.findAll("img") if "width" in img.attrs] 
+0

추가 컨텍스트가 도움이 될 수 있습니다. –

+0

@ user2475523 이벤트 후 목록 완성을 통해 결과를 실행하는 것보다 BeautifulSoup (내 대답 참조)에 내장 된 필터링 기능을 사용하면 정말 편리합니다. 코드가 더 읽기 쉽고 빠르게 실행됩니다. –

0

BeautifulSoup로는이 문제를 처리하기 위해 findAll()를 호출하는 방법을 제공

특수 값이 True 및 없음 특별한 관심이 없다. True는 주어진 속성에 대한 값이있는 태그와 일치하고 None은 주어진 속성에 대해 값이없는 태그와 일치합니다. 몇 가지 예 : 여담으로

soup.findAll(align=True) 
# [<p id="firstpara" align="center">This is paragraph <b>one</b>.</p>, 
# <p id="secondpara" align="blah">This is paragraph <b>two</b>.</p>] 

[tag.name for tag in soup.findAll(align=None)] 
# [u'html', u'head', u'title', u'body', u'b', u'b']