Pythonスクレイプフレームワークティーチング(4):データベースに保存

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クローラー、データ分析、Webサイト開発、その他のケースチュートリアルビデオはオンラインで無料で視聴できます

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データベースにデータを格納できるアイテムパイプラインを実装しています。コードは次のとおりです。

上記のコードは次のように説明されています。

クラス属性で2つの定数を定義します。

  • 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

おすすめ

転載: blog.csdn.net/m0_48405781/article/details/114887765