【问题标题】:Newbie Q about Scrapy pipeline.py新手 Q 关于 Scrapy pipeline.py
【发布时间】:2009-11-20 15:19:33
【问题描述】:

我正在学习 Scrapy 教程。为了测试这个过程,我用这些文件创建了一个新项目:

See my post in Scrapy group for links to scripts, I cannot post more than 1 link here.

爬虫运行良好,将title标签之间的文字刮掉,放到FirmItem中

[whitecase.com] INFO: Passed FirmItem(title=[u'White & Case LLP - Lawyers - Rachel B. Wagner ']) 

但我陷入了流水线过程。我想将此 FirmItem 添加到 csv 文件中,以便将其添加到数据库中。

我是 python 新手,我正在学习。如果有人给我一个关于如何使 pipelines.py 工作以便将抓取的数据放入 items.csv 的线索,我将不胜感激。

谢谢。

【问题讨论】:

    标签: python web-crawler scrapy


    【解决方案1】:

    我认为他们在Scrapy Tutorial 中解决了您的具体问题。

    它建议,就像其他人在这里使用 CSV 模块一样。将以下内容放入您的 pipelines.py 文件中。

    import csv
    
    class CsvWriterPipeline(object):
    
        def __init__(self):
            self.csvwriter = csv.writer(open('items.csv', 'wb'))
    
        def process_item(self, domain, item):
            self.csvwriter.writerow([item['title'][0], item['link'][0], item['desc'][0]])
            return item
    

    不要忘记通过将管道添加到 settings.py 中的 ITEM_PIPELINES 设置来启用管道,如下所示:

    ITEM_PIPELINES = ['dmoz.pipelines.CsvWriterPipeline']
    

    根据您的项目的具体情况进行调整。

    【讨论】:

      【解决方案2】:

      将内置的CSV feed export(在v0.10 中可用)与CsvItemExporter 一起使用。

      【讨论】:

        【解决方案3】:

        Python 有一个module for reading/writing CSV files,这比自己编写输出更安全(并且正确地引用/转义...)

        import csv
        csvfile = csv.writer(open('items.csv', 'w'))
        csvfile.writerow([ firmitem.title, firmitem.url ])
        csvfile.close()
        

        【讨论】:

        • 谢谢,但我不知道 FirmItem 在哪里。这就是我尝试使用 pipeline.py 的原因。 (对不起,我在行前放了 4 个空格,但格式不正确)>>> csvfile = csv.writer(open('items.csv', 'w')) >>> csvfile.writerow([firmitem.title, Firmitem.url])回溯(最近一次调用最后):文件“”,第 1 行,在 csvfile.writerow([firmitem.title,firmitem.url]) NameError: name 'firmitem' is未定义
        • firmitem 是你的数据对象
        • 对不起,这是我不明白的。我如何获得 FirmItem(我认为它应该与 class name 匹配?)当我在 IDLE 中运行代码时,我得到“NameError: name 'FirmItem' is not defined”
        • 没有 FirmItem 是类名。变量名称未打印在您在问题中显示的行中。但我认为 leeo 有答案。
        【解决方案4】:

        打开文件并写入。

        f = open('my.cvs','w')
        f.write('h1\th2\th3\n')
        f.write(my_class.v1+'\t'+my_class.v2+'\t'+my_class.v3+'\n')
        f.close()
        

        或者在标准输出上输出你的结果,然后将标准输出重定向到文件./my_script.py >> res.txt

        【讨论】:

        • 这对我不起作用:>>> f = open('my.csv', 'rw') Traceback(最近一次调用最后):文件“”,第 1 行,在 f = open('my.csv', 'rw') IOError: [Errno 22] invalid mode ('rw') or filename: 'my.csv'
        猜你喜欢
        • 1970-01-01
        • 2014-05-14
        • 1970-01-01
        • 2013-07-31
        • 2013-09-01
        • 1970-01-01
        • 2011-03-03
        • 2016-04-24
        • 2017-03-11
        相关资源
        最近更新 更多