【发布时间】:2023-04-01 03:42:01
【问题描述】:
我打算将使用 python scrapy spider 抓取的图像直接保存到我的 mysql 数据库中,而不是下载到本地文件系统中。如何修改我在 pipelines.py 上的代码以使下载的图像直接保存到数据库中?以下是我使用的一些代码。
注意:我遇到的主要问题是我无法使用 item['images'] 访问图像项内容(二进制图像文件格式),如 pipelines 所示.py.
items.py
import scrapy
class MyItem(scrapy.Item):
image_urls = scrapy.Field()
images = scrapy.Field()
settings.py
ITEM_PIPELINES = {'scrapy.contrib.pipeline.images.ImagesPipeline': 1}
管道.py
import mysql.connector
from decouple import config
class SavetoMySQL:
def __init__(self):
self.user = config("DB_USER")
self.password = config("DB_PASSWORD")
self.host = config("DB_HOST")
self.port = config("DB_PORT")
def connect_database(self):
self.conn = mysql.connector.connect(host=self.host,
user=self.user,
password=self.password,
port=self.port)
def create_table(self):
self.curr = self.conn.cursor()
self.curr.execute("""CREATE TABLE IF NOT EXISTS myitem_db(
image_urls VARCHAR(300),
images LONGBLOB);
""")
def store_db(self, item):
insert_stmt = ("""INSERT INTO Book(image_urls, images)
VALUES (%s,%s)""")
data = (item['image_urls'],item['images']) # item["images"] cannot access and save image binary file format into database
self.curr.execute(insert_stmt, data)
def open_spider(self, spider):
self.connect_database()
self.create_table()
def process_item(self, item, spider):
self.store_db(item)
return item
def close_spider(self, spider):
self.curr.close()
self.conn.close()
【问题讨论】: