为何replace()、re.sub()、strip()无法处理目标字符串?
问题原因及解决方法
核心问题
你遇到的问题根源在于:把列表直接转成字符串时,原文本里的换行符被转义成了字面量的\n(即字符串中的\\n,由反斜杠和n两个字符组成),而非真正的换行符。你之前用的replace('\n','')等方法都是在替换真正的换行符,自然无法匹配到字符串里的\\n,所以没有效果。另外,直接把列表转成字符串还会引入多余的方括号[]、单引号'等符号,这也不是你想要的结果。
正确解决方案
不要先把列表转成字符串,而是先处理列表中的每个元素,再将处理后的元素组合成目标字符串:
- 遍历爬取到的每个元素,先清理其文本内容(去除首尾空白、替换换行等)
- 将清理后的文本元素拼接成最终字符串
修改后的完整代码:
import requests from bs4 import BeautifulSoup import re resp = requests.get('https://soysuper.com/p/granola-con-avena-y-frutos-rojos-kellogg-s-special-k-320-g-320-g', headers={'User-Agent':'Chrome/44.0.2403.157','Accept-Language': 'es-ES, es;q=0.5'}) soup = BeautifulSoup(resp.content.decode('UTF-8'),'html.parser') # 处理每个元素的文本:strip()去除首尾的换行、空格等空白字符 cleaned_data = [elem.text.strip() for elem in soup.find_all("section", {"class": "display display--coco"})] # 将处理后的文本拼接成字符串,用空格分隔(可根据需求调整分隔符) result_text = ' '.join(cleaned_data) print(result_text)
临时补救方案(不推荐)
如果已经得到了转义后的字符串text,可以针对字面量的\n进行替换,同时清理多余符号:
# 替换转义的换行符,清理多余空格和列表符号 string = text.replace('\\n', '').replace(' ', ' ').strip('[]\'')
内容的提问来源于stack exchange,提问作者Fernando
相关产品推荐
相关产品推荐

