Python爬虫CSV数据追加错误:数据错位问题排查与修正
解决Selenium+BeautifulSoup爬虫CSV数据错位问题(Name与Website不对应)
问题现象
爬取mergr.com网站数据并写入CSV后,出现Name字段内容全部在上半部分,Website字段内容全部在下半部分的错位情况,无法实现一行对应一组Name和Website的格式。
问题根源
原代码逻辑错误:先遍历抓取所有Name,将每个Name封装成单独字典追加到列表;再遍历抓取所有Website,同样封装成单独字典追加到列表。用这种列表生成DataFrame时,前半段数据只有Name键,后半段只有Website键,最终CSV里就会出现数据错位。
错误代码示例:
from selenium import webdriver from bs4 import BeautifulSoup import pandas as pd driver = webdriver.Chrome() driver.get("https://mergr.com/xxx") soup = BeautifulSoup(driver.page_source, 'html.parser') data_list = [] # 先追加所有Name字典 names = soup.select(".name-selector") for name in names: data_list.append({"Name": name.text.strip()}) # 再追加所有Website字典 websites = soup.select(".website-selector") for website in websites: data_list.append({"Website": website.text.strip()}) # 生成CSV时数据错位 df = pd.DataFrame(data_list) df.to_csv("mergr_data.csv", index=False) driver.quit()
解决方案
调整循环逻辑,在单次循环中同时抓取当前条目的Name和Website,整合到同一个字典后再追加到列表,确保每个字典都包含一组对应的Name和Website键值对。
正确代码示例:
from selenium import webdriver from bs4 import BeautifulSoup import pandas as pd driver = webdriver.Chrome() driver.get("https://mergr.com/xxx") soup = BeautifulSoup(driver.page_source, 'html.parser') data_list = [] # 定位每个条目容器,遍历每个容器获取对应Name和Website items = soup.select(".item-container-selector") # 替换为实际条目容器选择器 for item in items: name = item.select_one(".name-selector").text.strip() if item.select_one(".name-selector") else "" website = item.select_one(".website-selector").text.strip() if item.select_one(".website-selector") else "" # 同一字典封装对应数据 data_list.append({"Name": name, "Website": website}) # 生成CSV时每行对应一组数据 df = pd.DataFrame(data_list) df.to_csv("mergr_data.csv", index=False) driver.quit()
关键说明:
- 核心是找到每个数据条目的共同父容器,通过遍历父容器来确保Name和Website属于同一组数据
- 加入
if判断避免因元素缺失导致的报错,保证代码健壮性
内容的提问来源于stack exchange,提问作者Amen Aziz
相关产品推荐
相关产品推荐

