为什么scrapy存不到mysql
时间: 2023-07-05 08:07:07 浏览: 99
利用scrapy将爬到的数据保存到mysql(防止重复)
Scrapy 默认使用 SQLite 数据库进行数据存储,如果你想要将数据存储到 MySQL 数据库中,你需要进行以下操作:
1. 安装 Python MySQL 驱动程序,如 `mysql-connector-python` 或 `pymysql`。
2. 在 Scrapy 项目的 `settings.py` 文件中进行如下配置:
```
ITEM_PIPELINES = {
'myproject.pipelines.MySQLPipeline': 300,
}
MYSQL_HOST = 'localhost'
MYSQL_DATABASE = 'mydatabase'
MYSQL_USER = 'myusername'
MYSQL_PASSWORD = 'mypassword'
MYSQL_PORT = 3306
```
3. 创建一个 `pipelines.py` 文件,在其中实现 MySQL 数据库的存储:
```
import mysql.connector
class MySQLPipeline(object):
def __init__(self, host, database, user, password, port):
self.host = host
self.database = database
self.user = user
self.password = password
self.port = port
@classmethod
def from_crawler(cls, crawler):
return cls(
host=crawler.settings.get('MYSQL_HOST'),
database=crawler.settings.get('MYSQL_DATABASE'),
user=crawler.settings.get('MYSQL_USER'),
password=crawler.settings.get('MYSQL_PASSWORD'),
port=crawler.settings.get('MYSQL_PORT')
)
def open_spider(self, spider):
self.cnx = mysql.connector.connect(
host=self.host,
database=self.database,
user=self.user,
password=self.password,
port=self.port
)
self.cursor = self.cnx.cursor()
def close_spider(self, spider):
self.cursor.close()
self.cnx.close()
def process_item(self, item, spider):
data = (item['field1'], item['field2'], item['field3'])
self.cursor.execute("INSERT INTO mytable (field1, field2, field3) VALUES (%s, %s, %s)", data)
self.cnx.commit()
return item
```
以上是 Scrapy 存储数据到 MySQL 的简单配置和示例,你可以根据自己的需求进行相应的修改。
阅读全文