Python使用bs4爬取商品图片URL如何合并为单行写入CSV
问题原因
你当前的代码每获取到1张图片URL就单独调用一次writerow写入一行,自然会出现每个URL占一行的情况。正确逻辑是先把同一个商品的所有图片URL收集到一个列表中,全部收集完成后再一次性写入一行。
修正后可直接运行的代码
import csv from bs4 import BeautifulSoup # 此处省略你原本的页面请求代码,假设已经拿到soup对象 box = soup.find_all('div',{'class':'row product-container'}) for product in box: # 初始化空列表存储当前商品的所有图片URL img_url_list = [] images = product.select('.carousel-image-wrapper img') for img in images: image_link = img['src'] print(image_link) # 先将URL存入列表,不立即写入 img_url_list.append(image_link) # 单个商品的所有图片收集完成后,一次性写入一行 with open("image_src.csv", "a", encoding="utf-8", newline='') as f: writeFile = csv.writer(f) writeFile.writerow(img_url_list)
注意事项
- 修正了原代码的变量名错误:原代码中你定义的变量是
image_link,写入时误用了不存在的image_src变量,会直接触发报错 - 打开CSV时新增
newline=''参数,可避免Windows系统下写入CSV出现多余空行的问题 - 将文件写入操作移出了图片遍历循环,既满足同商品URL放同一行的需求,也减少了频繁打开关闭文件的IO消耗
- 如果需要添加表头,可在首次写入文件时先调用
writeFile.writerow(['图1URL','图2URL','图3URL'...])写入表头行,列数匹配你爬取的商品最多的图片数量即可
内容的提问来源于stack exchange,提问作者boyenec
相关产品推荐
相关产品推荐

