Python爬取网页表格:如何去除空白项与元素内制表符空格?
网页表格爬取问题解决方案
问题描述
我使用Beautiful Soup编写的网页表格爬取脚本整体运行正常,但前两项结果存在以下问题:
- Q1:第一个结果为空列表
[],需要忽略该空项 - Q2:第二个结果的第二个元素
'12 -inch'存在隐藏制表符导致的多余空格,需要去除
原代码
import requests import pandas as pd from bs4 import BeautifulSoup headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'} testlink = "https://www.crutchfield.com/p_13692194/JL-Audio-12TW3-D8.html?tp=64077" r = requests.get(testlink, headers=headers) soup = BeautifulSoup(r.content, 'lxml') table = soup.find('table', class_='table table-striped') df = pd.DataFrame(columns=['col1', 'col2']) rows = [] for i, row in enumerate(table.find_all('tr')): rows.append([el.text.strip() for el in row.find_all('td')]) for row in rows: print(row)
修改后的代码
import requests import pandas as pd from bs4 import BeautifulSoup import re headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'} testlink = "https://www.crutchfield.com/p_13692194/JL-Audio-12TW3-D8.html?tp=64077" r = requests.get(testlink, headers=headers) soup = BeautifulSoup(r.content, 'lxml') table = soup.find('table', class_='table table-striped') df = pd.DataFrame(columns=['col1', 'col2']) rows = [] for row in table.find_all('tr'): td_list = [el.text.strip() for el in row.find_all('td')] # 过滤空列表 if td_list: # 处理每个元素中的多余空白(包括制表符、多个空格) cleaned_td = [re.sub(r'\s+', ' ', item) for item in td_list] rows.append(cleaned_td) for row in rows: print(row)
问题解决说明
Q1:忽略空列表
在生成每行的td_list后,添加判断if td_list:,只有当列表不为空时才添加到rows中,直接跳过空的行结果。
Q2:去除隐藏制表符和多余空格
使用正则表达式re.sub(r'\s+', ' ', item),把任意数量的空白字符(包括制表符、多个空格)替换成单个空格,同时保留原本需要的单个空格(比如3 1/2这种格式)。
内容的提问来源于stack exchange,提问作者Uberverbosity
相关产品推荐
相关产品推荐

