Python爬取BBC新闻时转义字符异常与列表文本拼接问题
问题根源
你看到的反斜杠、额外引号、逗号根本不是爬取的正文自带的内容:
- Python直接打印整个列表对象时,会自动给列表内的每个字符串元素包裹引号,对字符串内部原有的引号加反斜杠转义,元素之间用逗号分隔,这只是列表类型的默认展示逻辑,不是你存储的文本真的混入了这些多余字符。
- 你之前单独打印每个
div.text格式正常,已经能证明爬取到的单段内容本身是干净的,完全不需要做额外的特殊字符替换。
修复方案
直接把列表里存的所有段落用分隔符拼成一整个字符串即可,调整逻辑如下:
- 遍历段落时用
strip()去掉每段首尾的多余空白,顺手过滤掉空内容 - 收集完所有段落后,用字符串的
join()方法把列表拼成完整文本,段落之间用两个换行分隔,和原文的段落排版保持一致
修改后的完整代码:
import requests from bs4 import BeautifulSoup def scraper(): link = 'https://www.bbc.co.uk/news/uk-52255054' page = requests.get(link) soup = BeautifulSoup(page.content, 'html.parser') results = soup.find(class_='ssrcss-pv1rh6-ArticleWrapper') body = results.find_all(attrs={'class': 'ssrcss-1q0x1qg-Paragraph'}) paragraph_list = [] for div in body: para_text = div.text.strip() if para_text: # 过滤无意义空段落 paragraph_list.append(para_text) # 拼接为完整连续正文 content = '\n\n'.join(paragraph_list) return content
效果验证
直接打印函数返回的content变量,就能得到排版正常、没有多余符号的完整正文,不会再出现转义反斜杠、列表自带的引号和逗号。
补充提示:只要不直接打印存储段落的整个列表对象,不管是取单个段落元素打印,还是拼接成完整字符串后打印,都不会出现那些异常的多余字符。
内容的提问来源于stack exchange,提问作者BigCabbage
相关产品推荐
相关产品推荐

