1、scrapy爬取数据保存到文件
scrapy crawl 项目名 -o 文件名.json
2、保存的文件类型还有很多种
csv,xml,pickle,marshal,ftp远程输出
其他的写法差不多,ftp输出需要配置用户名,密码,地址,输出路径
scrapy crawl 程序名 -o ftp://user:pass@ftp.example.com/path/to/test.csv
3、下面进入到今天的正题:
Item Pipeline 介绍
item Pipeline为项目管道,当Item生成后,它会自动被送到Item Pipeline进行处理,它经常来做
如下操作
1.清理HTMl数据
2.验证爬取得数据,检查爬取的字段
3.查重并丢弃重复的内容
4.将爬取的结果保存到数据库
4、如何实现Item pipeline:
定义process_item()方法,启用ItemPipeline时会自动调用,
process_item()方法必须返回包含数据的字典或是Item对象,或者抛出异常
import pymongo
from scrapy.exceptions import DropItem
class TextPipeline(object):
def __init__(self):
self.limit = 50
def process_item(self, item, spider):
if item['text']:
if len(item['text']) > self.limit:
item['text'] = item['text'][0:self.limit].rstrip() + '...'
return item
else:
return DropItem('Missing Text')
代码解析:
对返回的字段text进行处理,只要字符长度大于50的,
同文件下写入代码:
class MongoPipeline(object):
def __init__(self, mongo_uri, mongo_db):
self.mongo_uri = mongo_uri
self.mongo_db = mongo_db
@classmethod
def from_crawler(cls, crawler):
return cls(
mongo_uri=crawler.settings.get('MONGO_URI'),
mongo_db=crawler.settings.get('MONGO_DB')
)
def open_spider(self, spider):
self.client = pymongo.MongoClient(self.mongo_uri)
self.db = self.client[self.mongo_db]
def process_item(self, item, spider):
name = item.__class__.__name__
self.db[name].insert(dict(item))
return item
def close_spider(self, spider):
self.client.close()
代码解析:
from_crawler:类方法,用@classmethod标识,通过参数crawler可以拿到全局配置的信息,全局配置在setting中
open_spider:当spider开启的时候,被激活,做初始化操作
close_spider:当spider接结束的时候,会调用,关闭数据库
接下来配置setting文件就ok了
//谁的数大,优先级就越高,先被调用
ITEM_PIPELINES = {
'tutorial.pipelines.TextPipeline': 300,
'tutorial.pipelines.MongoPipeline': 400,
}
MONGO_URI='localhost'
MONGO_DB='tutorial'
介绍完了