当前位置:   article > 正文

scrapy连接到(SQLite,Mysql,Mongodb,Redis)数据库_scrapy连接数据库

scrapy连接数据库

这次我给大家讲讲如何使用scrapy连接到(SQLite,Mysql,Mongodb,Redis)数据库,并把爬取的数据存储到相应的数据库中。

一、SQLite

1.修改pipelines.py文件加入如下代码

  1. # 爬取到的数据写入到SQLite数据库
  2. import sqlite3
  3. class SQLitePipeline(object):
  4. #打开数据库
  5. def open_spider(self, spider):
  6. db_name = spider.settings.get('SQLITE_DB_NAME', 'scrapy.db')
  7. self.db_conn = sqlite3.connect(db_name)
  8. self.db_cur = self.db_conn.cursor()
  9. #关闭数据库
  10. def close_spider(self, spider):
  11. self.db_conn.commit()
  12. self.db_conn.close()
  13. #对数据进行处理
  14. def process_item(self, item, spider):
  15. self.insert_db(item)
  16. return item
  17. #插入数据
  18. def insert_db(self, item):
  19. values = (
  20. item['upc'],
  21. item['name'],
  22. item['price'],
  23. item['review_rating'],
  24. item['review_num'],
  25. item['stock'],
  26. )
  27. sql = 'INSERT INTO books VALUES(?,?,?,?,?,?)'
  28. self.db_cur.execute(sql, values)

2.修改settings.py文件,加入如下代码

  1. # sqlite 配置
  2. SQLITE_DB_NAME = 'scrapy.db'

在settings启动管道文件

  1. ITEM_PIPELINES = {
  2. 'toscrape_book.pipelines.SQLitePipeline': 400,
  3. }

二、mysql

1.修改pipelines.py文件加入如下代码

  1. # 爬取到的数据写入到MySQL数据库
  2. import pymysql
  3. class MySQLPipeline(object):
  4. # 打开数据库
  5. def open_spider(self, spider):
  6. db = spider.settings.get('MYSQL_DB_NAME','scrapy_db')
  7. host = spider.settings.get('MYSQL_HOST', 'localhost')
  8. port = spider.settings.get('MYSQL_PORT', 3306)
  9. user = spider.settings.get('MYSQL_USER', 'root')
  10. passwd = spider.settings.get('MYSQL_PASSWORD', '123456')
  11. self.db_conn =pymysql.connect(host=host, port=port, db=db, user=user, passwd=passwd, charset='utf8')
  12. self.db_cur = self.db_conn.cursor()
  13. # 关闭数据库
  14. def close_spider(self, spider):
  15. self.db_conn.commit()
  16. self.db_conn.close()
  17. # 对数据进行处理
  18. def process_item(self, item, spider):
  19. self.insert_db(item)
  20. return item
  21. #插入数据
  22. def insert_db(self, item):
  23. values = (
  24. item['upc'],
  25. item['name'],
  26. item['price'],
  27. item['review_rating'],
  28. item['review_num'],
  29. item['stock'],
  30. )
  31. sql = 'INSERT INTO books VALUES(%s,%s,%s,%s,%s,%s)'
  32. self.db_cur.execute(sql, values)

2.修改settings.py文件,加入如下代码

  1. # mysql 配置
  2. MYSQL_DB_NAME = 'scrapy_db'
  3. MYSQL_HOST = '127.0.0.1'
  4. MYSQL_USER = 'root'
  5. MYSQL_PASSWORD = '123456'

在settings启动管道文件

  1. ITEM_PIPELINES = {
  2. 'toscrape_book.pipelines.MySQLPipeline': 401,
  3. }

三、mongodb

1.修改pipelines.py文件加入如下代码

  1. # 爬取到的数据写入到Mongodb数据库
  2. from pymongo import MongoClient
  3. from scrapy import Item
  4. class MongoDBPipeline(object):
  5. # 打开数据库
  6. def open_spider(self, spider):
  7. db_uri = spider.settings.get('MONGODB_URI', 'mongodb://localhost:27017')
  8. db_name = spider.settings.get('MONOGDB_DB_NAME', 'scrapy_db')
  9. self.db_client = MongoClient(db_uri)
  10. self.db = self.db_client[db_name]
  11. # 关闭数据库
  12. def close_spider(self, spider):
  13. self.db_client.close()
  14. # 对数据进行处理
  15. def process_item(self, item, spider):
  16. self.insert_db(item)
  17. return item
  18. # 插入数据
  19. def insert_db(self, item):
  20. if isinstance(item, Item):
  21. item = dict(item)
  22. self.db.books.insert(item)

2.修改settings.py文件,加入如下代码

  1. # mongodb 配置
  2. MONGODB_URI = 'mongodb://127.0.0.1:27017'
  3. MONGODB_DB_NAME = 'scrapy_db'

在settings启动管道文件

  1. ITEM_PIPELINES = {
  2. 'toscrape_book.pipelines.MongoDBPipeline': 403,
  3. }

四、redis

1.修改pipelines.py文件加入如下代码

  1. # 爬取到的数据写入到redis数据库
  2. import redis
  3. from scrapy import Item
  4. class RedisPipeline(object):
  5. # 打开数据库
  6. def open_spider(self, spider):
  7. db_host = spider.settings.get('REDIS_HOST', 'localhost')
  8. db_port = spider.settings.get('REDIS_PORT', 6379)
  9. db_index = spider.settings.get('REDIS_DB_INDEX', 0)
  10. self.db_conn = redis.StrictRedis(host=db_host, port=db_port, db=db_index)
  11. self.item_i = 0
  12. # 关闭数据库
  13. def close_spider(self, spider):
  14. self.db_conn.connection_pool.disconnect()
  15. # 处理数据
  16. def process_item(self, item, spider):
  17. self.insert_db(item)
  18. return item
  19. # 插入数据
  20. def insert_db(self, item):
  21. if isinstance(item, Item):
  22. item = dict(item)
  23. self.item_i += 1
  24. self.db_conn.hmset('book:{}'.format(self.item_i), item)

2.修改settings.py文件,加入如下代码

  1. # redis 配置
  2. REDIS_HOST = '127.0.0.1'
  3. REDIS_PORT = 6379
  4. REDIS_DB_INDEX = 0

在settings启动管道文件

  1. ITEM_PIPELINES = {
  2. 'toscrape_book.pipelines.RedisPipeline': 404,
  3. }

scrapy 连接各数据的设置并不复杂,首先在pipelines文件中建立管道,建立个数据的连接,然后处理数据,关闭连接。接下来我们在settings文件中定义各类数据库的基本配置,然后在item_pipelines中启动相应的管道

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/208141?site
推荐阅读
相关标签
  

闽ICP备14008679号