无法从BeautifulSoup文本输出中删除换行符(Python 2.7.5)
我正在尝试写一个程序,用来解析一系列的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')