scrapy存入excel时,excel文件被反复擦除重写。文件大小始终不超过100k,请问这种情况改如何解决

发布于 2022-09-11 20:51:45 字数 810 浏览 24 评论 0

怀疑是每次都在新建文件,具体代码如下

from openpyxl import Workbook

class ExcelPipline(object):

def __init__(self):
    # 类实例化
    self.wbook = Workbook()
    # 激活工作表
    self.wsheet = self.wbook.active
    #设置表头
    self.wsheet.append(['省份','城市','小区名字','是否开盘','销售电话','每平米价格',
                    '房屋卖点','几居室','面积','地址','房天下详情url'])

def process_item(self, item, spider):
    if item.collection == 'newhouseitem':
        # 把数据的每一项整理出来
        data = [item['province'],item['city'],item['house_name'],item['sale'],item['phone_num'],item['price'],
                item['tags'],item['rooms'],item['area'],item['address'],item['origin_url']]
        # 将数据以行的形式添加到xlsx
        self.wsheet.append(data)
        #自定义文件位置、标题
        self.wbook.save('F:\\newhouseitem.xlsx')
    return item

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

红ご颜醉 2022-09-18 20:51:45

最终决定将数据存为.csv文件,通过wps另存为.xlsx

旧竹 2022-09-18 20:51:45

你这种写法理论上是没问题的。

Pipeline的__init__在整个爬虫生命周期中,只会执行一次。每次处理item,然后保存。

首先,确保你的item有返回值。在process_item中打印下日志看下。

然后,换一种方式。

# 去掉__init__中内容
def process_item(self, item, spider):
    if item.collection == 'newhouseitem':
        wbook = load_workbook('F:\\newhouseitem.xlsx')
        # ...
        
        # 把数据的每一项整理出来
        data = [item['province'],item['city'],item['house_name'],item['sale'],item['phone_num'],item['price'],
                item['tags'],item['rooms'],item['area'],item['address'],item['origin_url']]
        # 将数据以行的形式添加到xlsx
        self.wsheet.append(data)
        #自定义文件位置、标题
        self.wbook.save('F:\\newhouseitem.xlsx')
    return item

最后,你用数据库啥的来存数据吧。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文