标签:表示 ssm ... sel cli pass init 文件的 erro
今天记录下scrapy将数据存储到本地和数据库中,不是不会写,因为小编每次都写觉得都一样,所以记录下,以后直接用就可以了-^o^-
1.本地存储
设置pipel ines.py
class Ak17Pipeline(object):def __init__(self):self.file = open(‘ak17.json‘, ‘w‘) # 存储文件的类型def process_item(self, item, spider):result = json.dumps(dict(item), ensure_ascii=False) + ‘,\n‘self.file.write(result)return itemdef close_spider(self):self.file.close()
2. 存储到MongoDB数据库
设置setting文件
# mongo数据库MONGO_HOST = "127.0.0.1" # 数据库地址MONGO_PORT = 27017 # 端口号MONGO_DBNAME = "ak17" # 数据库名称MONGO_COLNAME = "ak" # 集合名称
class MongoPipeline(object):"""保存进数据库"""def __init__(self):# 初始化操作host = settings[‘MONGO_HOST‘]port = settings[‘MONGO_PORT‘]dbs = settings[‘MONGO_DBNAME‘]colname = settings[‘MONGO_COLNAME‘]# 链接数据库self.db = MongoClient(host=host, port=port)# 选择数据库self.database = self.db[dbs]# 选择集合self.col = self.database[colname]def process_item(self, item, spider):# 插入数据date = dict(item)self.col.insert(date)return itemdef close_spider(self):# 关闭链接self.db.close()
3.MySql数据库存储
设置setting文件
MYSQL_HOSTS = ‘127.0.0.1‘MYSQL_USER = ‘root‘MYSQL_PASSWORD = ‘root‘MYSQL_PORT = 3306MYSQL_DB=‘xiciip‘CHARSET=‘utf8‘
class WebcrawlerScrapyPipeline(object):‘‘‘保存到数据库中对应的class1、在settings.py文件中配置2、在自己实现的爬虫类中yield item,会自动执行‘‘‘def __init__(self, dbpool):self.dbpool = dbpool@classmethoddef from_settings(cls, settings):‘‘‘1、@classmethod声明一个类方法,而对于平常我们见到的叫做实例方法。2、类方法的第一个参数cls(class的缩写,指这个类本身),而实例方法的第一个参数是self,表示该类的一个实例3、可以通过类来调用,就像C.f(),相当于java中的静态方法‘‘‘#读取settings中配置的数据库参数dbparams = dict(host=settings[‘MYSQL_HOST‘],db=settings[‘MYSQL_DBNAME‘],user=settings[‘MYSQL_USER‘],passwd=settings[‘MYSQL_PASSWD‘],charset=‘utf8‘, # 编码要加上,否则可能出现中文乱码问题cursorclass=MySQLdb.cursors.DictCursor,use_unicode=False,)dbpool = adbapi.ConnectionPool(‘MySQLdb‘, **dbparams) # **表示将字典扩展为关键字参数,相当于host=xxx,db=yyy....return cls(dbpool) # 相当于dbpool付给了这个类,self中可以得到# pipeline默认调用def process_item(self, item, spider):query = self.dbpool.runInteraction(self._conditional_insert, item) # 调用插入的方法异步处理query.addErrback(self._handle_error, item, spider) # 调用异常处理方法return item# 写入数据库中# SQL语句在这里def _conditional_insert(self, tx, item):sql = "insert into jsbooks(author,title,url,pubday,comments,likes,rewards,views) values(%s,%s,%s,%s,%s,%s,%s,%s)"params = (item[‘author‘], item[‘title‘], item[‘url‘], item[‘pubday‘],item[‘comments‘],item[‘likes‘],item[‘rewards‘],item[‘reads‘])tx.execute(sql, params)# 错误处理方法def _handle_error(self, failue, item, spider):print failue
标签:表示 ssm ... sel cli pass init 文件的 erro
原文地址:http://www.cnblogs.com/syketw23/p/7667748.html