Python的strip()函数不起作用

时间:2018-06-07 17:28:27

标签: python beautifulsoup

我想要抓取以下HTML:

<div class="messaging-device">
     "
                 Text I want 
     "
     <span class="edit-panel">
          <a href="">Edit</a>
     </span>
</div>

我有以下Python代码来抓它:

from bs4 import BeautifulSoup as bs
soup = bs(html, "lxml")
div = soup.find("div" {"class": "messaging-device"})
# div.get_text() returns 
# " 
#            Text I want
# Edit"
# so in order to get just "Text I want"
# I replaced div.get_text() with the following line
text = div.get_text().strip().split(" ", 1)[0]
print(text)

不幸的是,文本有许多尾随换行符,所以我改变了

text = div.get_text().strip().split(" ", 1)[0] 

text = div.get_text().strip().split(" ", 1)[0].strip()

但是这种改变完全消除了“我想要的文字”。有谁知道我可以正确摆脱尾随的新行吗?

1 个答案:

答案 0 :(得分:0)

您发布的代码未运行。而且,即使在我猜测如何修复它之后,它实际上并没有按照您的要求进行操作。但我很确定我知道错误在哪里。

此代码不返回空字符串,而是返回"

text = div.get_text().strip().split(" ", 1)[0].strip()

......这不是因为strip。因为,与您声称的内容相反,此代码首先不包含您想要的文本:

text = div.get_text().strip().split(" ", 1)[0]

...而是'"\n'。所以当然剥离会给你一个空字符串。

如果您打印出中间件,您可以看到原因:

>>> div.get_text()
'\n     "\n                 Text I want \n     "\n     \nEdit\n\n'
>>> div.get_text().strip()
'"\n                 Text I want \n     "\n     \nEdit'
>>> div.get_text().strip().split(" ", 1)
['"\n', '                Text I want \n     "\n     \nEdit']
>>> div.get_text().strip().split(" ", 1)[0]
'"\n'
>>> div.get_text().strip().split(" ", 1)[0].strip()
'"'

看起来你实际想要做的是找到前两个"字符之间的文字,然后拆分:

>>> div.get_text().strip().split('"', 2)[1].strip()
'Text I want'

但是,我认为你通过包含所有后代文本而不仅仅是直接的子文本,使事情变得比他们需要的更复杂。如果我们没有Edit部分来处理,那么整个事情只是你想要的文本被复杂的空格,换行符和引号组合在一起......我们可以一次性删除所有文本:< / p>

>>> div.contents[0]
'\n     "\n                 Text I want \n     "\n
>>> div.contents[0].strip(' \n"')
 'Text I want'