在html元素上使用text_content()时避免连续单词的强大方法

时间:2013-08-27 15:59:46

标签: python string text lxml

我们正在解析网页。一个目标是找到所有单词及其频率。我们一直在使用lxml

from lxml import html

my_string = open(some_file_path).read()

tree = html.fromstring(my_string)

text_no_markup = tree.text_content()

好吧,我们会看到像这样的事情a_wordconcatenated_to_another

当我们期待a_word concatenated_to_another

仔细观察,似乎当a_word后跟某种类型的close标签,然后是更多的html标记,然后没有任何空格或换行符时,会发生这种情况。在某些标记中会包含concatenated_to_another。

我能解决这个问题的唯一方法是

my_modified_string = open(some_file_path).read().replace('>','> ')

所以我用gt符号和空格替换所有gt符号。

有没有更强大的方法来实现这一目标?

1 个答案:

答案 0 :(得分:2)

使用itertext()

>>> my_string = '''
... <div>
...     <b>hello</b>world
... </div>
... '''
>>>
>>> root = html.fromstring(my_string)
>>> print root.text_content()

    helloworld

>>> for text in root.itertext():
...     text = text.strip()
...     if text: # to skip empty(or space-only) string
...         print text
...
hello
world
>>> print ' '.join(root.itertext())

     hello world