2011-04-13 5 views
0

을 선택할 수 있도록 도와 Heres는 내 HMTL 코드 :BeautifulSoup로는 - 내가 div의와 클래스

<div class="BlockA"> 
    <h4>BlockA</h4> 
    <div class="name">John Smith</div> 
    <div class="number">2</div> 
    <div class="name">Paul Peterson</div> 
    <div class="number">14</div> 
</div> 

<div class="BlockB"> 
    <h4>BlockB</h4> 
    <div class="name">Steve Jones</div> 
    <div class="number">5</div> 
</div> 

공지 사항 BlockABlockB. 두 요소 모두 동일한 요소 (예 : namenumber)를 포함하지만 별도의 클래스 안에 있습니다. 저는 파이썬에 익숙하지 않고 다음과 같은 것을 시도하고 있습니다.

parsedHTML = soup.findAll("div", attrs={"name" : "number"}) 

하지만 그저 빈 화면 만 제공합니다. findAllblockA에서 수행하고 데이터를 표시 한 다음 BlockB에서 다른 루프를 시작하고 동일한 작업을 수행 할 수 있습니까?

감사합니다.

편집 :

BlockA 
    John Smith 
    2 
    Paul Peterson 
    14 

BlockB 
    Steve Whoever 
    123 
    Mr Whathisface 
    23 
+2

당신은 당신이 원하는 무엇을 우리에게 말하지 않았다! ;-) – Achim

+0

attrs = { "name": "number"}로 무엇을 원하니 ??? 아마도 BeautifulSoup을주의 깊게 (!) 읽고 { 'class': 'number'} 또는 무엇이든 사용하고 싶을 것입니다. –

답변

1

당신은 "이름"또는 "번호"의 클래스 속성이 포함 된 div를 찾으려면 : 그 묻고, 나는이 같은 JSON 단순히 값을 반복하고 출력을 원하는 ?

>>> import re 
>>> soup.findAll("div", {"class":re.compile("name|number")}) 

[<div class="name">John Smith</div>, <div class="number">2</div>, <div class="name">Paul Peterson</div>, <div class="number">14</div>, <div class="name">Steve Jones</div>, <div class="number">5</div>] 
0

가능한 class 값의 목록을 사용해야합니다. 당신의 편집을보고 한 후

soup.findAll('div', {'class': ['name', 'number']}) 

:

def grab_content(heading): 
    siblings = [s.contents[0] for s in heading.findNextSiblings()] 
    return {heading.contents[0]: siblings} 

headings = soup.findAll('h4') 
[grab_content(h) for h in headings] 

그리고 원래의 HTML 코드의 출력이 될이 :

[{u'BlockA': [u'John Smith', u'2', u'Paul Peterson', u'14']}, 
{u'BlockB': [u'Steve Jones', u'5']}] 
+0

답장을 보내 주셔서 감사합니다. 'return HttpResponse (h)'와'return HttpResponse (h.content) '를 사용하여 끝에 출력 할 때 단지'BlockB'를 반환하는'finadAll (h4)'를 수행하면 none을 반환합니다. 내가 빠진 것이 있습니까? – eoinzy

관련 문제