一般我们爬取的数据要存入到数据库或者生成本地文件才有意义
一、爬取的数据直接在本地生成文件
1、方法一、直接在运行命令的时候生成问
scrapy crawl 爬虫名字 -o 文件名
2、方法二、在管道中利用文件的写入方式
1、管道的代码
import json # quotes爬取的数据写到本地 class QuotesPipelines(object): def process_item(self, item, spider): if spider.name == 'quotes': with open('quotes_test.json', 'a', encoding='utf-8') as fp: fp.write(json.dumps(dict(item), indent=2, ensure_ascii=False)+ ',\n') return item
- 2、在
settings.py
中配置 - 3、直接运行
scrapy crawl quotes --nolog
三、将抓取的数据存入到mongodb
数据库中
1、安装包
pip install pymongo
2、在
settings.py
中配置数据库的链接信息# 设置数据库连接 MONGO_URI = 'localhost' MONGO_DATABASE = 'test'
3、在管道中写业务逻辑
import pymongo class MongoPipeline(object): """ 定义一个存入到数据库中的类 """ collection_name = 'scrapy_items' 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_DATABASE', 'items') ) def open_spider(self, spider): self.client = pymongo.MongoClient(self.mongo_uri) self.db = self.client[self.mongo_db] def close_spider(self, spider): self.client.close() def process_item(self, item, spider): if spider.name == 'quotes': self.db[self.collection_name].insert_one(dict(item)) return item
4、在
settings.py
中配置管道- 5、直接运行
scrapy crawl quotes --nolog
四、将爬取的数据存入到mysql
数据库中
1、安装包
pip install pymysql
2、在数据库中创建表(区别于
mongodb
)3、在
settings.py
中配置mysql
连接信息# Mysql数据库的配置信息 MYSQL_HOST = 'localhost' MYSQL_DBNAME = 'nodejs' # 数据库名字,请修改 MYSQL_USER = 'root' # 数据库账号,请修改 MYSQL_PASSWD = 'root' # 数据库密码,请修改 MYSQL_PORT = 3306 # 数据库端口,在dbhelper中使用
4、使用管道存入数据库中
import pymysql # 西刺代理的数据入库 class XiciPipeline(object): def __init__(self, dbparams): self.connect = pymysql.connect( host=dbparams['host'], port=dbparams['port'], db=dbparams['db'], user=dbparams['user'], passwd=dbparams['passwd'], charset=dbparams['charset'], use_unicode=dbparams['use_unicode'] ) # 创建一个句柄 self.cursor = self.connect.cursor() @classmethod def from_crawler(cls, crawler): # 读取settings中的配置 dbparams = dict( host=crawler.settings.get('MYSQL_HOST'), db=crawler.settings.get('MYSQL_DBNAME'), user=crawler.settings.get('MYSQL_USER'), passwd=crawler.settings.get('MYSQL_PASSWD'), port=crawler.settings.get('MYSQL_POR'), charset='utf8', # 编码要加上,否则可能出现中文乱码问题 use_unicode=False, ) return cls(dbparams) def process_item(self, item, spider): if spider.name == 'xici': sql = 'insert into xici(ip, port, speed, proxy_type, localhost) values (%s, %s, %s, %s,%s)' self.cursor.execute(sql, (item['ip'], item['port'], item['speed'], item['proxy_type'], item['localhost'])) self.connect.commit() return item def close_spider(self, spider): self.connect.close()
5、在
settings.py
中配置管道- 6、直接运行
scrapy crawl quotes --nolog