Redis 데이터베이스에 저장
데이터베이스에 저장하는 형식은 초기화시 파일을 여는 작업이 데이터베이스에 연결하는 작업으로 변환된다는 점을 제외하면 파일에 저장하는 형식과 비슷합니다. 쓰기 작업은 원래 파일에 기록 된 작업이 데이터베이스 쓰기 작업으로 변환됩니다. Redis 데이터베이스를 예로 들어 보겠습니다.
# 这个是保存到redis
class RedisPipeline(object):
def __init__(self):
## 初始化链接
reids self.redis_cli = redis.StrictRedis(
host='127.0.0.1',
port=6379, db=1,
)
def process_item(self, item, spider):
## 保存到redis
self.redis_cli.lpush('quotes', json.dumps(dict(item)))
return item
def close_spider(self, spider):
self.redis_cli.close()
Python 크롤러, 데이터 분석, 웹 사이트 개발 및 기타 사례 자습서 동영상은 온라인에서 무료로 시청할 수 있습니다.
https://space.bilibili.com/523606542
Python 학습 교환 그룹 : 1039645993
MySQL 데이터베이스에 저장
# 这个是保存到mysql
class MySQLPipeline(object):
""" create database quotes charset=utf8;
use quotes; create table quotes (txt text, author char(20),
tags char(200)); """
def __init__(self):
self.connect = pymysql.connect(
host='192.168.159.128',
port=3306,
db='quotes', # 数据库名
user='windows',
passwd='123456',
charset='utf8',
use_unicode=True
)
# 创建操作数据的游标
self.cursor = self.connect.cursor()
def process_item(self, item, spider):
# 保存到mysql
# 执行sql语句
self.cursor.execute(
'insert into quotes (txt, author, tags) value(%s, %s, %s)', (item['text'], item['author'], item['tags'])
)
# 提交数据执行数据
self.connect.commit()
return item
# 关闭链接
def close_spider(self, spider):
self.cursor.close()
self.connect.close()
MongoDB에 데이터 저장
때로는 크롤링 된 데이터를 일종의 데이터베이스에 저장하여 항목 파이프 라인을 구현하여 이러한 작업을 완료하려고합니다. 다음은 MongoDB 데이터베이스에 데이터를 저장할 수있는 Item Pipeline을 구현 한 것으로 코드는 다음과 같다.
위의 코드는 다음과 같이 설명됩니다.
클래스 속성에 두 개의 상수를 정의하십시오.
- DB_URI 데이터베이스의 URI 주소입니다.
- DB_NAME 데이터베이스의 이름입니다.
from scrapy.item import Item
import pymongo
class MongoDBPipeline(object):
DB_URI = 'mongodb://localhost:27017/'
DB_NAME = 'scrapy_data'
def open_spider(self, spider):
self.client = pymongo.MongoClient(self.DB_URI)
self.db = self.client[self.DB_NAME]
def close_spider(self, spider):
self.client.close()
def process_item(self, item, spider):
collection = self.db[spider.name]
post = dict(item) if isinstance(item, Item)
else item collection.insert_one(post)
return item