Python HTML 处理

2 投票
4 回答
687 浏览
提问于 2025-04-17 12:46

我有一个包含俄文文本的html文件。我该怎么做才能提取出文本中的所有单词,而不包括html标签、特殊符号等等呢?

举个例子:

<html>...<body>...<div id='text'>Foo bar! Foo, bar.</div></body></html>

我需要:

['foo','bar','Foo','bar']

我试过用nltk这个工具,但它不支持俄文单词。

4 个回答

0

使用 lxml。它可以去掉标签、元素等等:

import urllib2

from lxml import etree


URL = 'http://stackoverflow.com/questions/9230675/python-html-processing'

html = urllib2.urlopen(URL).read()
tree = etree.fromstring(html, parser=etree.HTMLParser())

tree.xpath('//script')
# [<Element script at 102f831b0>,
#  ...
#  <Element script at 102f83ba8>]

tree.xpath('//style')
# [<Element style at 102f83c58>]

tags_to_strip = ['script', 'style']
etree.strip_elements(tree, *tags_to_strip)

tree.xpath('//style')
# []

tree.xpath('//script')
# []

body = tree.xpath('//body')
body = body[0]

text = ' '.join(body.itertext())
tokens = text.split()
# [u'Stack',
#  u'Exchange',
#  u'log',
#  u'in',
#  ...
#  u'Stack',
#  u'Overflow',
#  u'works',
#  u'best',
#  u'with',
#  u'JavaScript',
#  u'enabled']

如果文本是俄语,你会得到像这样的标记:

# [u'\xd1\x8d\xd1\x84\xd1\x84\xd0\xb5\xd0\xba\xd1\x82\xd1\x8b\xe2\x80\xa6',
#  u'\xd0\x9c\xd0\xb0\xd1\x80\xd0\xba',
#  ...
#  u'\xd0\x9c\xd0\xb0\xd0\xb9\xd0\xb5\xd1\x80']

错误处理是你需要自己完成的作业。

4

我正在使用 lxml 这个库来解析xml和html文件。lxml对于任何Unicode数据都能很好地处理。

4

一定要试试BeautifulSoup,它支持Unicode

撰写回答