我试图用BeautifulSoup转换一段HTML文本。下面是一个例子:
<div>
<p>
Some text
<span>more text</span>
even more text
</p>
<ul>
<li>list item</li>
<li>yet another list item</li>
</ul>
</div>
<p>Some other text</p>
<ul>
<li>list item</li>
<li>yet another list item</li>
</ul>
我试着这样做:
def parse_text(contents_string)
Newlines = re.compile(r'[\r\n]\s+')
bs = BeautifulSoup.BeautifulSoup(contents_string, convertEntities=BeautifulSoup.BeautifulSoup.HTML_ENTITIES)
txt = bs.getText('\n')
return Newlines.sub('\n', txt)
…但这样我的跨度元素总是在一条新的线上。这当然是一个简单的例子。在Python中,有没有一种方法可以像在浏览器中呈现文本那样(不需要css规则,只需要常规的div、span、li等元素的呈现方式)在HTML页面中获取文本?
我在尝试解析呈现的HTML时遇到了同样的问题。基本上看来BS并不是这方面的理想包。@Del提供了伟大的html2text解决方案。
关于一个不同的问题:BeautifulSoup get_text does not strip all tags and JavaScript@Helge提到使用nltk。不幸的是,nltk似乎正在停止这种方法。
我尝试了html2text和nltk.clean_html,并对计时结果感到惊讶,因此认为它们为子孙后代提供了一个答案。当然,速度很大程度上取决于数据的内容。。。
@Helge(nltk)回复。
使用呈现的html返回字符串非常有效。这个nltk模块甚至比html2text快,尽管html2text可能更健壮。
上面的答案来自@del
BeautifulSoup是一个scraping库,因此它可能不是进行HTML渲染的最佳选择。如果没有必要使用BeautifulSoup,您应该看看^{} 。例如:
这将输出:
相关问题 更多 >
编程相关推荐