使用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)}条数据!')
关键修改点说明
- 列表初始化移到循环外:这样每次循环的新数据会追加到同一个列表,不会被重置清空
- 每次爬取后追加数据:用
append()把单条数据加到对应列表,实现数据累计 - 简化DataFrame创建:直接用
pd.DataFrame(data),因为字典的key是列名,value是列数据,完全符合DataFrame的结构,不需要转置 - 添加
index=False:避免CSV里多出一列默认的索引值,让数据更干净
这样改完,你爬的65条数据应该都能完整写入CSV啦!
内容的提问来源于stack exchange,提问作者masterfugazi
相关产品推荐
相关产品推荐

