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

8 投票
4 回答
21825 浏览
提问于 2025-04-18 14:12

我正在尝试写一个程序,用来解析一系列的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", "")

4 个回答

1

遇到这个问题了。其他的解决方案看起来都很复杂,或者没有完全解决提问者的问题。这个一行代码就能很好地解决:

' '.join(re.split(r'[ \n\t]+',soup.text))
3

虽然这个问题已经有人回答过了,但我想说的是,用那种复杂的方式去替换其实没什么必要,你可以这样做:

import re

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

虽然通常来说,regex(正则表达式)是应该尽量避免使用的。

4

BeautifulSoup4内部有一个叫去除空格字符串的功能。

这些字符串通常会有很多多余的空格,你可以使用 .stripped_strings 这个生成器来去掉这些空格。具体可以查看这个链接:BS4文档中的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
7

你遇到的问题是,你希望能直接在原来的数据上进行操作,但实际上这些操作是会返回新值的。

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

你可以使用正则表达式来处理这个问题,不过对于这个过程来说,正则表达式有点复杂。实际上,特别是当你要处理的是开头和结尾的字符时,直接使用strip函数就可以了:

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

撰写回答