You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python Selenium爬虫时CSV仅写入单行数据的问题求助

解决爬虫CSV仅写入一行的问题

嘿,我一眼就瞅出问题啦——你现在的代码每次循环都会重置存储数据的列表,最后只把最后一次爬取的单条数据写入了CSV,自然就丢了前面64行!咱们一步步改:

问题根源拆解

  • 你把listingUrl、listingImg这些存储数据的列表放在了for循环内部,每次循环都会重新创建空列表,之前爬的全白存了
  • 最后构建字典时用的是单次循环的单个元素(不是累计的列表),转成DataFrame当然只有一行
  • 收集数据的逻辑完全没跟上打印的节奏,打印是循环里每次输出,但数据没存起来

修改后的完整代码

# 把存储数据的列表初始化移到循环外面!
listingUrl = []
listingImg = []
listingTitle = []
listingPrice = []

# Gets listing box
listingBox = searchGrid.find_elements(By.CLASS_NAME, 'v2-listing-card')

# Loops through each listing box
for listingBoxes in listingBox:
    # Gets listing url
    url = listingBoxes.find_element(By.CSS_SELECTOR, 'a.listing-link').get_attribute('href')
    print("LISTING URL:", url)
    listingUrl.append(url)  # 追加到列表里

    # Gets listing image
    img = listingBoxes.find_element(By.CSS_SELECTOR, 'img.wt-position-absolute').get_attribute('src')
    print("IMAGE:", img)
    listingImg.append(img)

    # Gets listing title
    title = listingBoxes.find_element(By.CLASS_NAME, 'wt-text-caption').text
    print("TITLE:", title)
    listingTitle.append(title)

    # Gets price
    price = "$" + listingBoxes.find_element(By.CLASS_NAME, 'currency-value').get_attribute("innerHTML")
    print("ITEM PRICE:", price)
    listingPrice.append(price)
    
    # Gets seller name(注释掉的部分如果要启用,记得也改成追加到列表)
    # seller_name = listingBoxes.find_element(By.XPATH, '...').get_attribute("innerHTML")
    # print("SELLER NAME:", seller_name)
    # listingSellerName.append(seller_name)
    print("---------------")

finally:
    driver.quit()

    # 现在用累计的列表构建字典,每个key对应一整列数据
    data = {
        'Listing URL': listingUrl, 
        'Listing Thumbnail': listingImg,
        'Listing Title': listingTitle, 
        'Listing Price': listingPrice
    }

    df = pd.DataFrame(data)  # 不用再transpose了,直接用字典生成DataFrame
    df.to_csv('raw_data.csv', index=False)  # 加index=False避免写入多余的索引列
    
    print(f'Data has been scrapped and added. 共写入{len(listingUrl)}条数据!')

关键修改点说明

  1. 列表初始化移到循环外:这样每次循环的新数据会追加到同一个列表,不会被重置清空
  2. 每次爬取后追加数据:用append()把单条数据加到对应列表,实现数据累计
  3. 简化DataFrame创建:直接用pd.DataFrame(data),因为字典的key是列名,value是列数据,完全符合DataFrame的结构,不需要转置
  4. 添加index=False:避免CSV里多出一列默认的索引值,让数据更干净

这样改完,你爬的65条数据应该都能完整写入CSV啦!

内容的提问来源于stack exchange,提问作者masterfugazi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 16:15:58