使用 MySQLDB 模块在 Scrapy 中连接和批量插入 MySQL - Python 2.7
此示例演示如何使用 Python Scrapy 将数据动态插入 MySQL。
你无需为任何项目编辑 pipelines.py
文件。
此示例可用于你的所有项目。
只需从你的 Spider
和 pipelines.py
中选择一个查询,就会自动创建一个查询。
使用批量插入语句批量插入行。
必读 :
- 你来自 Spider 的 tihuan 6 的密钥必须与数据库表的列名相同。
- 必须在运行代码之前创建表。
- 注意
if
len(self.items)>= 50
行,你可以将50
改为任何整数。
settings.py
DB_CREDS = {
'host':'localhost',
'user':'root',
'pass':'password',
'db':'db_name'
}
your_project_folder/spiders/spider_file.py
from scrapy.utils.project import get_project_settings
def __init__(self, *args, **kwargs):
self.connectDB()
def connectDB(self):
self.conn = MySQLdb.connect(user=DB_CREDS['user'], passwd=DB_CREDS['pass'], db=DB_CREDS['db'], host=DB_CREDS['host'], charset="utf8", use_unicode=True)
self.cursor = MySQLdb.cursors.DictCursor(self.conn)
self.conn.autocommit(True)
your_project_folder/pipelines.py
# -*- coding: utf-8 -*-
import logging
from scrapy import signals
class MyPipeline(object):
def __init__(self):
self.items=[]
def process_item(self, item, spider):
self.placeholders = ', '.join(['%s'] * len(item))
self.columns = ', '.join(item.keys())
self.query = "INSERT INTO %s ( %s ) VALUES ( %s )" % ("table_name", self.columns, self.placeholders)
self.items.extend([item.values()])
if len(self.items) >= 50:
try:
spider.cursor.executemany(self.query, self.items)
self.items = []
except Exception as e:
if 'MySQL server has gone away' in str(e):
spider.connectDB()
spider.cursor.executemany(self.query, self.items)
self.items = []
else:
raise e
return item
def close_spider(self, spider):
try:
spider.cursor.executemany(self.query, self.items)
self.items = []
except Exception as e:
if 'MySQL server has gone away' in str(e):
spider.connectDB()
spider.cursor.executemany(self.query, self.items)
self.items = []
else:
raise e