【发布时间】:2018-11-21 15:52:03
【问题描述】:
在使用 BeautifulSoup 解析从 html 中提取的文本并将其写入 .csv 文件时遇到问题。
使用标题、日期、描述、信息
等数据解析页面我有一个 Description 文本示例,其中包含从网页解析的确切结构。它有那些
标签和双空格:
<p>Hello World <br/>
<br/>
Key points <br/>
<br/>
- Point number one <br/>
- Point number two <br/>
- Point number three </p>
所以我设法使用 .text.strip() 将其提取为文本,现在是:
Hello World
Key points
- Point number one
- Point number two
- Point number three
然后我想将结果保存到 .csv 文件中,每个结果都保存到一个新单元格中:
Title, Date, Description, Info
Title, Date, Description, Info
Title, Date, Description, Info
为此,我正在创建一个文件,设置标题并开始使用 FOR 循环写入它
filename = "scraping.csv"
f = open(filename, "w")
headers = "Title, Date, Description, Info\n"
f.write(headers)
for article in articles:
...
f.write(title + "," + date + "," + description + "," + info + "\n")
f.close()
最后我得到的是包含所有信息的 .csv 文件。 问题是当 description 被传递给文件时,它会破坏所有行。
Title, Date,
Des
crip
tion, Info
Title, Date,
Des
crip
tion, Info
Title, Date,
Des
crip
tion, Info
如果我写入文件,除了 description 之外的一切都很好。
如何将此说明保存到单元格并忽略所有不需要的换行符/换行符?
更新:
根据 @ewwink 的建议,这种组合有助于删除不需要的换行符
description = re.sub(r"[\r\n]+", " ", description)
不幸的是,它在一行中打印到 .csv 文件的单元格中,没有进行格式化。但是我可以通过替换 \r\n
在 .csv 文件中使用不可见的 pilcrow 符号制作换行符pilcrow = """
"""
description = re.sub(r"[\r\n]+", pilcrow, description)
【问题讨论】:
-
可能有点难看,但现在您尝试
f.write(title.strip() + "," + date.strip() + "," + description.strip() + "," + info.strip() + "\n")以确保各个字符串确实没有所有换行符吗? -
在将其写入文件之前,您可以打印描述吗?
-
是的,它会很好,没有标签,只是带有格式的文本
-
@Guimute,文本已从列表
str(description[0].text.strip())传递,但没有帮助 -
不错的发现,只是知道可能上次我尝试错误来自未加引号的引号。但秘密仍然是双引号,试试你可以删除正则表达式替换行。
标签: python-3.x macos csv web-scraping beautifulsoup