BeautifulSoup提取<td>内容为何含大量空格与换行?
解决爬虫提取表格时内容含大量空白字符的问题
尝试运行以下爬虫代码提取表格数据到列表,但返回的内容包含大量空白字符。已尝试使用strip()和replace(" ","")方法去除多余字符,但并未奏效。请问该如何清理这些空白?或是目标网站的HTML本身存在问题?
from bs4 import BeautifulSoup as bs import requests import pandas as pd import csv url = 'https://www.felvi.hu/felveteli/ponthatarok_statisztikak/friss_statisztikak/!FrissStatisztikak/index.php/friss_statisztikak/szakonkent?filters%5Bsta_iin_id%5D=1475&filters%5Bsta_kar_id%5D=' result = requests.get(url) html_code = bs(result.text, "html.parser") table = html_code.find('table', class_ = "center tblc w100 l") rows = table.find_all('tr') list_rows = [] for row in rows: row_td = row.find_all('td') for i in row: print(i) str_cells = row_td #clean_text = bs(str_cells,"lxml").get_text() #list_rows.append(clean_text)
问题根源
你遇到的空白不全是普通空格,网页里的内容大概率混了换行符(\n)、制表符(\t)或者非断空格( ,对应Unicode编码\u00A0),普通的replace(" ","")只能替换普通空格,对这些特殊空白字符无效,所以之前的方法没用。
修复后的代码
from bs4 import BeautifulSoup as bs import requests import re url = 'https://www.felvi.hu/felveteli/ponthatarok_statisztikak/friss_statisztikak/!FrissStatisztikak/index.php/friss_statisztikak/szakonkent?filters%5Bsta_iin_id%5D=1475&filters%5Bsta_kar_id%5D=' result = requests.get(url) html_code = bs(result.text, "html.parser") table = html_code.find('table', class_ = "center tblc w100 l") rows = table.find_all('tr') list_rows = [] for row in rows: row_td = row.find_all('td') clean_cells = [] for td in row_td: # 获取td的全部文本,包括各种空白字符 raw_text = td.get_text() # 用正则把所有连续空白(换行、制表、非断空格等)替换成单个空格,再去首尾空白 cleaned_text = re.sub(r'\s+', ' ', raw_text).strip() clean_cells.append(cleaned_text) list_rows.append(clean_cells) # 打印处理后的结果 for row in list_rows: print(row)
核心处理逻辑
- 用
td.get_text()获取内的完整文本,不管里面有什么空白字符。 - 正则表达式
r'\s+'会匹配所有Unicode空白字符(包括普通空格、换行、制表、非断空格),把连续的空白替换成单个空格,最后用strip()去掉首尾的空白。 - 如果不想用正则,也可以手动替换非断空格:
raw_text.replace('\u00A0', ' ').strip(),但正则能一次性处理所有类型的空白,更省心。
内容的提问来源于stack exchange,提问作者flegmate
相关产品推荐
相关产品推荐

