爬虫程序到这里虽说已经成功,但也有让人不满意的地方,比如csv中各列的顺序是随机的,看起来比较混乱,可在配置文件settings.py中使用FEED_EXPORT_FIELDS指定各列的次序:
FEED_EXPORT_FIELDS=['upc','name','price','stock','review_rating','review_num']
另外,结果中评价等级字段的值是One、Two、Three......这样的单词,我们可以将它们改为阿拉伯数字,下面实现一个Item Pipeline,将单词映射到数字。在pipelines.py中实现BookPipeline,代码如下:
class BookPipeline(object):
review_rating_map={
'One': 1,
'Two': 2,
'Three': 3,
'Four': 4,
'Five': 5,
}
def process_item(self,item,spider):
rating=item.get('review_rating')
if rating:
item['review_rating']=self.review_rating_map[rating]
return item
在配置文件settings.py中启用BookPipeline:
ITEM_PIPELINES = {
'toscrape_book.pipelines.BookPipeline': 300,
}
重新运行爬虫并观察结果:
$scrapy crawl books -o books.csv --nolog
在爬虫文件目录下查看爬取结果,部分截图如下:
此时,各字段已经按指定次序排列,并且评价等级字段的值是我们所期望的阿拉伯数字。
到此为止,整个项目完成了!