无法从BeautifulSoup文本输出中删除换行符(Python 2.7.5)

时间:2014-07-22 03:35:06

标签: python text beautifulsoup

我正在尝试编写一个程序来解析一系列HTML文件,并将结果数据存储在.csv电子表格中,这非常依赖于新行在正确的位置。我已经尝试了所有可以找到的方法来消除某些文本的断行,但无济于事。相关代码如下所示:

soup = BeautifulSoup(f)
ID = soup.td.get_text()
ID.strip()
ID.rstrip()
ID.replace("\t", "").replace("\r", "").replace("\n", "")
dateCreated = soup.td.find_next("td").get_text()
dateCreated.replace("\t", "").replace("\r", "").replace("\n", "")
dateCreated.strip()
dateCreated.rstrip()
# debug
print('ID:' + ID + 'Date Created:' + dateCreated)

结果代码如下所示:

ID:
FOO
Date Created:
BAR

这个和同一个程序的另一个问题一直困扰着我。帮助太棒了。感谢。

编辑:想出来,这是一个非常愚蠢的错误。而不只是做

ID.replace("\t", "").replace("\r", "").replace("\n", "")

我应该做的

ID = ID.replace("\t", "").replace("\r", "").replace("\n", "")

3 个答案:

答案 0 :(得分:2)

虽然这个问题已经得到了解答,但我只是想通过这种冗长的方式进行替换没有很好的理由,你实际上可以这样做:

import re

ID = re.sub(r'[\t\r\n]', '', ID)

尽管regex通常是应该避免的。

答案 1 :(得分:2)

您手头的问题是,您希望从实际返回新值的操作中获得就地操作。

ID.strip() # returns the rstripped value, doesn't change ID.
ID = ID.strip() # Would be more appropriate.

你可以使用正则表达式,虽然正则表达式对这个过程来说太过分了。实际上,特别是如果它的开头和结尾字符,只需将它们传递给剥离:

ID = ID.strip('\t\r\n')

答案 2 :(得分:2)

BeautifulSoup4 >有剥离字符串的内部实现

  

这些字符串往往有很多额外的空格,您可以使用.stripped_strings生成器删除它:   BS4 Doc stripped_strings

html_doc="""<div class="path">
    <a href="#"> abc</a>
    <a href="#"> def</a>
    <a href="#"> ghi</a>
</div>"""

from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc, "html.parser")

result_list = []
for s in soup.select("div.path"):
    result_list.extend(s.stripped_strings)

print  " ".join(result_list)
Output: abc def ghi