2009-04-11 3 views
0

매우 큰 HTML 파일 (몇 메가 바이트)이 있습니다. 원하는 데이터가 다음과 같음을 알고 있습니다. <div class=someName>here</div>매우 큰 HTML 파일에서 특정 요소를 구문 분석

HTML 페이지를 통해 구문 분석 할 수있는 좋은 라이브러리는 무엇입니까? 요소를 순환하여 각각을 채울 수 있습니다. someName? C#, Python 또는 C++에서이 작업을 수행하려고합니다.

답변

12

내가 작업에 파이썬과 BeautifulSoup을 사용합니다. 이런 종류의 물건을 다룰 때 매우 견고합니다.

SoupStrainer을 사용하면 BeautifulSoup이 원하는 클래스가있는 문서에서 DIV를 구문 분석 만하도록 만들 수 있으므로 메모리에 전체를 가질 필요가 없습니다. 예를 들어

이 문서는 다음과 같습니다 말 :

<div class="test">Hello World</div> 
<div class="hello">Aloha World</div> 
<div>Hey There</div> 

당신이 쓸 수 있습니다 :

>>> from BeautifulSoup import BeautifulSoup, SoupStrainer 
>>> doc = ''' 
...  <div class="test">Hello World</div> 
...  <div class="hello">Aloha World</div> 
...  <div>Hey There</div> 
... ''' 
>>> findDivs = SoupStrainer('div', {'class':'hello'}) 
>>> [tag for tag in BeautifulSoup(doc, parseOnlyThese=findDivs)] 
[<div class="hello">Aloha World</div>] 
1

사운드를 사용하려는 경우 예전의 정규 표현식의 경우와 같습니다.

입력 :

<div class="test">Hello World</div> 
<div class="somename">Aloha World</div> 
<div>Hey There</div> 

정규식 :

\<div\sclass\=\"somename\"\>(?<Text>.*?)\<\/div\> 

수익률 :

Aloha World (note: In a single group named Text) 

은 아마 REGULA와 비록

... 등없는 따옴표를 둘러싸 고려해야 r 표현은 이제 two problems입니다.

+0

아이러니 좋다. 그러나, "do not do this"형태의 답변을 upvote하는 것은 쉽지 않습니다. –

+0

... 덜 아이러니합니다. – Codebrain

0

TinyXML 시도하십시오. (C++ XML 파서)