2008-09-01 41 views
15

因为正则表达式吓唬我,我试图找到一种方法,从Python中的字符串中删除所有的HTML标签和解决HTML实体。过滤掉HTML标签和蟒蛇解决实体

+0

实际上链接深入Python应该是[这](HTTP:// diveintopython的。org/html_processing/index.html) – 2008-09-02 09:54:12

回答

39

使用lxml这是蟒蛇最好的XML/HTML库。

import lxml.html 
t = lxml.html.fromstring("...") 
t.text_content() 

如果你只是想消毒HTML看看lxml.html.clean module

6

描述虽然我与卢卡斯同意,正则表达式是不是所有的吓人,我还以为你应该用专门的HTML解析器去的作者。这是因为HTML标准足够大(特别是如果你想任意解析从互联网上取下的“HTML”页面),你需要编写大量的代码来处理角落案例。看来python includes one out of the box

您也应该检查python bindings for TidyLib可以清理破碎的HTML,使得任何HTML解析更高的成功率。

1

您可能需要比正则表达式更复杂的东西。网页通常有尖括号不属于标签的一部分,就像这样:

<div>5 < 7</div> 

剥离与正则表达式的标签将返回字符串“5”和治疗

< 7</div> 

为单一标签并将其剥离。

我建议寻找已经编写的代码,这是否适合你。我做了一个搜索,发现这个:http://zesty.ca/python/scrape.html它也可以解析HTML实体。

15

使用BeautifulSoup!这对你来说是完美的,你有可靠的美德标记,需要从中得到合理的东西。只需传入原始文本,提取所有字符串标签并加入即可。

+9

,代码如下:''.join(BeautifulSoup(value,convertEntities = BeautifulSoup.HTML_ENTITIES).findAll(text = True)) – 2011-01-03 20:23:29

0

正则表达式是不可怕的,但写自己的正则表达式剥离HTML是到了疯狂的可靠路径(并且它也行不通)。遵循智慧之路,并使用许多优秀的HTML解析库之一。

Lucas的例子也被打破,因为‘子’不是Python字符串的方法。你必须“导入re”,然后调用re.sub(pattern,repl,string)。但是这并不是那里,因为你的问题的正确答案不涉及写任何正则表达式。

0

望着感的人的数量都在这里展示在其他的答案,我会说,可能使用正则表达式是不是适合自己情况的最好的主意。去的东西尝试和测试,并把我以前的答案的示威,正则表达式不必吓人。

如果使用