示例1:非常简单的管道
假设我们有一个包含几个爬虫的应用,以 Python 常见格式提供爬取日期。数据库需要将其转为字符串格式,以便进行索引。我们不想编辑爬虫,因为爬虫的数量比较多。此时可以怎么做呢?使用一个非常简单的管道对 Item 进行后置处理,执行需要的转换即可。让我们看看它是如何工作的。
from datetime import datetime
class TidyUp(object):
def process_item(self, item, spider):
item['date'] = map(datetime.isoformat, item['date'])
return item
如你所见,这里只有一个包含 process_item() 方法的简单类。这是我们为了这个简单管道所需要做的所有事情。我们可以复用第 3 章中的爬虫,将前面的代码写入 pipelines 目录的 tidyup.py 文件中。
可以将这个 Item 管道的代码放到任何地方,不过为其创建一个单独的目录是一个好主意。 |
现在,需要编辑项目的 settings.py 文件,将 ITEM_PIPELINES 设置为
ITEM_PIPELINES = {'properties.pipelines.tidyup.TidyUp': 100 }
前面代码字典中的数字 100,用于定义管道连接的顺序。如果另一个管道有更小的数值,它将在该管道之前优先处理 Item。
本示例的完整代码位于 ch08/properties 目录中。 |
现在,可以运行该爬虫了。
$ scrapy crawl easy -s CLOSESPIDER_ITEMCOUNT=90
...
INFO: Enabled item pipelines: TidyUp
...
DEBUG: Scraped from <200 ...property_000060.html>
...
'date': ['2015-11-08T14:47:04.148968'],
和我们期望的一样,日期现在被格式化为 ISO 字符串了。