Python HTML 处理
我有一个包含俄文文本的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。