2017-09-14 6 views
2

아이이 (가) h4 태그가 없을 때 잘 작동합니다 다음이 있습니다re.compile 아이들이있을 때 BeautifulSoup4 텍스트 요소에 대해 작동하지

if (BS.find('div', {"id" : "table_content"}).find('h4', text=re.compile(".*Super Users.*"))): 
    print "Found Super Users!" 

그러나, h4 태그는 아이들의이있는 경우 결코 인쇄되지 않습니다. 내가 사용하는 디버깅을 시도 다음과 같이 (TMP) 부분은이 h4 태그의 자식의 텍스트이기 때문에 그런 것처럼, 그것을 떨어져 던지는 것 같다, 기본적으로

Users  
Super Users 
    (TMP) 
      

Administrators 
.... 

: 생산

for h4 in BS.find('div', {"id" : "table_content"}).findAll('h4'): 
    print h4.text 

이에

<h4>Super User 
    <span>(<a href="/tmp">TMP</a>)</span> 
</h4> 

단점은 (TMP) 항상이되지 않는 것입니다, 그래서 가정을 기운 다. 단지 Super Userh4의 텍스트에 있는지 알아야합니다. 그런 다음 계속할 수 있습니다.

+0

확실하지하지만're.compile되지 않을 것 (". * Super Users. *", flags = re.DOTALL)'줄 바꿈을 처리 하시겠습니까? –

+0

불행히도, 이것은 효과가없는 것 같습니다. h4.text [: 5] == "Super"'가 테스트를 통과했기 때문에 줄 바꿈이 될 수도 있습니다. 어쩌면 내 정규식이 꺼져 있을까요? – rjbogz

+0

좋습니다,'re.compile (". * Super \ s + Users. *"))', 모든 공백은 공백이 아닙니다. –

답변

2

find 매개 변수 (H4) 태그 유형을 설정하거나 BS의 방법으로 별도로 설정하지 마십시오 :

if (BS.find('div', {"id" : "table_content"}).find(text=re.compile(".*Super Users.*"))): 
    print "Found Super Users!" 

또는

if (BS.find('div', {"id" : "table_content"}).h4.find(text=re.compile(".*Super Users.*"))): 
    print "Found Super Users!" 
+0

와우, 그런 간단한 해결책입니다. 이것이 왜 다른 점이 있습니까? – rjbogz

+0

확실하지는 않지만 현재 파서의 기능이라고 생각합니다. 태그를 설정하지 않으면이 속성 ('text')이있는 모든 HTML 요소를 검색합니다. 아마도 h4 태그에 형제가있을 때 파서는이 텍스트가 해당 텍스트에 속한다고 판단하지만 h4 태그 자체는 부모가 아닙니다. 따라서 태그없이'find '를 호출하면 형제 텍스트에서도 검색 할 수 있습니다. –