我有一个非常大的HTML文件(几兆字节)。我知道我想要的数据是<div class=someName>here</div>
什么是通过HTML页面解析的好库,以便我可以循环遍历元素并抓取每个someName
?我想用C#,Python或C ++来做这件事。
答案 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)
答案 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解析器)