从非常大的HTML文件中解析特定元素

时间:2009-04-11 01:26:22

标签: c# c++ python html parsing

我有一个非常大的HTML文件(几兆字节)。我知道我想要的数据是<div class=someName>here</div>

之类的

什么是通过HTML页面解析的好库,以便我可以循环遍历元素并抓取每个someName?我想用C#,Python或C ++来做这件事。

5 个答案:

答案 0 :(得分:12)

我会使用Python和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 :(得分:3)

如果您想使用C#

Html Agility Pack是一个很好的选择

答案 2 :(得分:1)

Xerces有充分的文档记录,支持和测试。 (C ++)

http://xerces.apache.org/xerces-c/

(是的,它是一个XML解析器但它应该可以做到这一点)

答案 3 :(得分: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)

可能需要考虑封闭的引号丢失等...

虽然现在使用正则表达式two problems

答案 4 :(得分:0)

尝试TinyXML。 (C ++ XML解析器)