Skip to main content
 首页 » 编程设计

python之如何在 scrapy python 中使用蜘蛛名称动态创建 csv 文件

2025年05月04日7xiaohuochai

您好,我正在使用 scrapy 来获取一些 html 页面,

我写了我的蜘蛛,我从 spider.py 文件中的页面获取了所需的数据,在我的 pipeline.py 文件中我想写所有csv 文件中的数据是用蜘蛛的名字动态创建的,下面是我的pipeline.py代码

管道.py:

from scrapy import log 
from datetime import datetime 
 
 
class examplepipeline(object): 
 
    def __init__(self): 
        dispatcher.connect(self.spider_opened, signal=signals.spider_opened) 
        dispatcher.connect(self.spider_closed, signal=signals.spider_closed) 
 
    def spider_opened(self, spider): 
        log.msg("opened spider  %s at time %s" % (spider.name,datetime.now().strftime('%H-%M-%S'))) 
        self.exampleCsv = csv.writer(open("%s(%s).csv"% (spider.name,datetime.now().strftime("%d/%m/%Y,%H-%M-%S")), "wb"), 
                   delimiter=',', quoting=csv.QUOTE_MINIMAL) 
        self.exampleCsv.writerow(['Listing Name', 'Address','Pincode','Phone','Website'])            
 
    def process_item(self, item, spider): 
        log.msg("Processsing item " + item['title'], level=log.DEBUG) 
        self.exampleCsv.writerow([item['listing_name'].encode('utf-8'), 
                                    item['address_1'].encode('utf-8'), 
                                    [i.encode('utf-8') for i in item['pincode']], 
                                    item['phone'].encode('utf-8'), 
                                    [i.encode('utf-8') for i in item['web_site']] 
                                    ]) 
        return item  
 
 
    def spider_closed(self, spider): 
        log.msg("closed spider %s at %s" % (spider.name,datetime.now().strftime('%H-%M-%S'))) 

结果:

--- <exception caught here> --- 
  File "/usr/lib64/python2.7/site-packages/twisted/internet/defer.py", line 133, in maybeDeferred 
    result = f(*args, **kw) 
  File "/usr/lib/python2.7/site-packages/Scrapy-0.14.3-py2.7.egg/scrapy/xlib/pydispatch/robustapply.py", line 47, in robustApply 
    return receiver(*arguments, **named) 
  File "/home/local/user/example/example/pipelines.py", line 19, in spider_opened 
    self.examplecsv = csv.writer(open("%s(%s).csv"% (spider.name,datetime.now().strftime("%d/%m/%Y,%H-%M-%S")), "wb"), 
exceptions.IOError: [Errno 2] No such file or directory: 'example(27/07/2012,10-30-40).csv' 

这里其实spider的名字是example

我不明白上面的代码有什么问题,它应该用蜘蛛名称动态创建 csv 文件,但是显示上面提到的错误,任何人都可以让我知道那里发生了什么.........

请您参考如下方法:

问题出在文件名中的正斜杠(目录分隔符)。不允许。尝试在日期中使用其他字符。

更多信息在这里 http://www.linuxquestions.org/questions/linux-software-2/forward-slash-in-filenames-665010/

此链接有助于获取您想要的格式 How to print date in a regular format in Python?

>>> import datetime 
>>> datetime.date.today() 
datetime.date(2012, 7, 27) 
>>> str(datetime.date.today()) 
'2012-07-27' 

在你的代码中使用它

open("%s(%s).csv"% (spider.name,datetime.now().strftime("%d-%m-%Y:%H-%M-%S"))