Python网页表格爬取遇ValueError列数不匹配问题求助
解决"ValueError: cannot set a row with mismatched columns"问题
问题根源是你创建DataFrame时砍掉了最后4列,但爬取的每行数据仍保留完整列数,两者长度不匹配导致报错。以下是修正方案:
修正后的完整代码
import requests from bs4 import BeautifulSoup import pandas as pd url = 'https://kr.youtubers.me/united-states/all/top-500-youtube-channels-in-united-states/en' page = requests.get(url) soup = BeautifulSoup(page.text,'lxml') table1 = soup.find('div', id = 'content') headers = [] for i in table1.find_all('th'): title = i.text.strip() headers.append(title) # 直接截取需要的表头,无需先创建全量DataFrame再删除列 filtered_headers = headers[:-4] my_data = pd.DataFrame(columns = filtered_headers) # 遍历行数据时,同步截取与表头匹配的长度 for j in table1.find_all('tr')[1:]: row_data = j.find_all('td') row = [i.text.strip() for i in row_data] # 截取对应长度的行数据,保证和DataFrame列数一致 filtered_row = row[:len(filtered_headers)] my_data.loc[len(my_data)] = filtered_row
关键修改点
- 提前处理表头:直接通过
headers[:-4]截取目标表头,替代先创建全列DataFrame再用iloc删除的冗余操作。 - 同步截断行数据:用
row[:len(filtered_headers)]动态匹配表头长度,避免硬编码数字,适配表头结构变化。 - 清理冗余字符:加入
.strip()清除文本中的换行、空格,提升数据整洁度。
内容的提问来源于stack exchange,提问作者python noobie
相关产品推荐
相关产品推荐

