Python爬取网页表格后无法去除\n字符,求解决方案
解决Python爬取网页表格时无法去除
\n字符的问题 我太懂这种被顽固换行符折腾的感觉了!你试过的replace、split这些方法没起效,其实是因为你获取文本的方式没找对——咱们直接来改代码解决问题。
问题根源
你现在用td.get_text()直接获取整行的文本,这会把每个<td>元素里的内容(包括换行符、空白)全部连在一起,事后再处理就容易漏网。正确的做法是逐个处理每个单元格的文本,从源头就把换行符干掉。
修改后的完整代码
from urllib.request import urlopen from bs4 import BeautifulSoup import requests import pandas as pd url = "https://shared.websol.barchart.com/quotes/quote.php?page=quote&sym=ng&x=13&y=8&domain=if&display_ice=1&enabled_ice_exchanges=&tz=0&ed=0" res = requests.get(url) soup = BeautifulSoup(res.text, 'lxml') # 获取表头,同时清理空白 column_headers = [th.getText(strip=True) for th in soup.findAll('tr', limit=2)[1].findAll('th')] print(column_headers) # 获取数据行 data_rows = soup.findAll('tr')[2:] # 处理每一行的单元格,彻底清理换行符 cleaned_data = [] for row in data_rows: # 遍历每个td,先去除首尾空白(含\n),再清理中间可能残留的换行 row_data = [cell.get_text(strip=True).replace('\n', '') for cell in row.find_all('td')] cleaned_data.append(row_data) print(row_data) # 可选:将清理后的数据存入DataFrame df = pd.DataFrame(cleaned_data, columns=column_headers) print(df)
关键改动说明
- 表头部分也加上了
strip=True,避免表头里隐藏的空白字符干扰后续数据处理 - 遍历数据行时,不再直接取整行文本,而是逐个处理每个
<td>元素:get_text(strip=True):自动去除文本开头和结尾的换行符、空格、制表符等空白字符- 额外补充
.replace('\n', ''):防止单元格中间残留换行符(虽然大部分情况strip=True就足够,但多这一步更保险)
效果验证
修改后你会看到输出的每一行都是干净的列表,比如:
['Cash (NGY00)', '2.890s', '+0.020', '0.000', '2.890', '2.890', '0', '2.870', '05/25/18', 'Q / C / O']
完全没有烦人的换行符了,后续存入DataFrame也不会有格式混乱的问题。
内容的提问来源于stack exchange,提问作者Siddharth Kulkarni
相关产品推荐
相关产品推荐

