scrapy爬虫案例保存至数据库
时间: 2023-09-17 20:14:56 浏览: 50
使用Scrapy爬虫将数据保存到数据库的一般步骤如下:
1. 创建一个数据库(例如MySQL)和表来存储数据。
2. 在Scrapy项目中添加数据库驱动和连接设置。
3. 在Scrapy项目中定义Item对象以保存爬取的数据。
4. 在Scrapy项目中编写Pipeline以处理Item对象,将其保存到数据库中。
下面是一个简单的示例,将Scrapy爬虫数据保存到MySQL数据库中:
1. 创建数据库和表
在MySQL中创建一个名为“mydatabase”的数据库,并创建一个名为“mytable”的表,该表包括以下列:id、title、author和content。
```
CREATE DATABASE mydatabase;
USE mydatabase;
CREATE TABLE mytable (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
author VARCHAR(255) NOT NULL,
content TEXT NOT NULL
);
```
2. 添加数据库驱动和连接设置
在Scrapy项目中的settings.py文件中添加MySQL驱动和连接设置:
```
# settings.py
ITEM_PIPELINES = {
'myproject.pipelines.MySQLPipeline': 300,
}
MYSQL_HOST = 'localhost'
MYSQL_DBNAME = 'mydatabase'
MYSQL_USER = 'root'
MYSQL_PASSWORD = 'mypassword'
```
3. 定义Item对象
在Scrapy项目中的items.py文件中定义Item对象:
```
# items.py
import scrapy
class MyItem(scrapy.Item):
title = scrapy.Field()
author = scrapy.Field()
content = scrapy.Field()
```
4. 编写Pipeline
在Scrapy项目中的pipelines.py文件中编写MySQLPipeline:
```
# pipelines.py
import mysql.connector
class MySQLPipeline(object):
def __init__(self, host, dbname, user, password):
self.host = host
self.dbname = dbname
self.user = user
self.password = password
@classmethod
def from_crawler(cls, crawler):
return cls(
host=crawler.settings.get('MYSQL_HOST'),
dbname=crawler.settings.get('MYSQL_DBNAME'),
user=crawler.settings.get('MYSQL_USER'),
password=crawler.settings.get('MYSQL_PASSWORD')
)
def open_spider(self, spider):
self.connection = mysql.connector.connect(
host=self.host,
dbname=self.dbname,
user=self.user,
password=self.password
)
self.cursor = self.connection.cursor()
def close_spider(self, spider):
self.connection.commit()
self.connection.close()
def process_item(self, item, spider):
self.cursor.execute('INSERT INTO mytable (title, author, content) VALUES (%s, %s, %s)',
(item['title'], item['author'], item['content']))
return item
```
在这个例子中,MySQLPipeline连接到MySQL数据库并将爬取的数据保存到“mytable”表中。
确保在Scrapy项目的主文件中启用MySQLPipeline:
```
# main.py
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings
from myproject.spiders.myspider import MySpider
process = CrawlerProcess(get_project_settings())
process.crawl(MySpider)
process.start()
```
当您运行Scrapy爬虫时,数据将被爬取并保存到MySQL数据库中。