2012-10-08 4 views
2

파이썬에서 특정 주석을 찾을 수 없습니다 (예 : <!-- why -->). 내 주된 이유는 2 개의 특정 코멘트 안에있는 모든 링크를 찾는 것입니다. 파서와 같은 것.Python을 사용하여 HTML 코드의 특정 주석 찾기

import urllib 
over=urlopen("www.gamespot.com").read() 
soup = BeautifulSoup(over) 
print soup.find("<!--why-->") 

을하지만 그것은 작동하지 않습니다 나는 Beautifulsoup와 함께이 시도. 이 아닌 regex을 사용해야 할 수도 있습니다.

도와주세요.

예 : 우리는이

<!--why--> 
www.godaddy.com 
<p> nice one</p> 
www.wwf.com 
<!-- why not--> 

편집과 같은 HTML 코드가 : 2 주석 사이에 다른 물건, 태그처럼있을 수 있습니다.

그리고 모든 링크를 저장해야합니다.

>>> from bs4 import BeautifulSoup, Comment 
>>> 
>>> s = """ 
... <p>header</p> 
... <!-- why --> 
... www.test1.com 
... www.test2.org 
... <!-- why not --> 
... <p>tail</p> 
... """ 
>>> 
>>> soup = BeautifulSoup(s) 
>>> comments = soup.findAll(text = lambda text: isinstance(text, Comment)) 
>>> 
>>> comments 
[u' why ', u' why not '] 

을 그리고 당신이 그들을있어 일단, 당신은 주위를 이동하는 보통의 트릭을 사용할 수 있습니다 : 당신이 모든 의견을 원하는 경우에

+0

모든 사람에게 도움이 될 실질적인 예를 들어주세요. –

답변

6

, 당신은 호출과 findAll을 사용할 수 있습니다

>>> comments[0].next 
u'\nwww.test1.com\nwww.test2.org\n' 
>>> comments[0].next.split() 
[u'www.test1.com', u'www.test2.org'] 

페이지가 실제로 어떻게 보이는지에 따라 약간 조정할 필요가있을 수 있으며 원하는 의견을 선택해야하지만 시작할 수 있도록해야합니다.

편집 :

>>> comments = soup.findAll(text = lambda text: isinstance(text, Comment) and text.strip() == 'why') 
>>> comments 
[u' why '] 

또는 지능형리스트를 사용하여 사후을 필터링 할 수와 같은

당신이 정말로 어떤 특정 텍스트처럼 오직 사람을 원하는 경우에, 당신이 할 수있는 일 :

>>> [c for c in comments if c.strip().startswith("why")] 
[u' why ', u' why not '] 
+0

좋은 해결책! 나는'Comment'를 가져와야 만한다는 것을 깨닫지 못했고 작동하지 못했습니다. –

+0

소스 코드에 많은 주석 블록이있을 수 있습니다. 나는 '왜'로 시작하는 것들만 검색해야합니다. 이 방법으로 작동합니까? –

+0

@georgemano : 편집했습니다. 파이썬 튜토리얼을 통해 가치있는 독서를 할 수 있습니다. 일단 알고 있지만 쉽게 추측 할 수없는 깔끔한 작업을 수행하는 데는 여러 가지 방법이 있습니다. – DSM

관련 문제