Scrapy用Twisted异步操作Mysql
1首先在setting中配置好数据库的信息,便于修改管理MYSQL_HOST='192.168.0.2'#主机MYSQL_DBNAME='dbname'#数据库名称MYSQL_USER='root'#用户名MYSQL_PASSWORD='jian'#密码在pipelines.py中# Twisted只是提供一个异步容器,本身没提供数据库链接class MysqlTwistedPipeline
·
1首先在setting中配置好数据库的信息,便于修改管理
MYSQL_HOST='192.168.0.2'#主机
MYSQL_DBNAME='dbname'#数据库名称
MYSQL_USER='root'#用户名
MYSQL_PASSWORD='jian'#密码
在pipelines.py中
# Twisted只是提供一个异步容器,本身没提供数据库链接
class MysqlTwistedPipeline(object):
def __init__(self,dbpool):
self.dbpool = dbpool
#从配置中获取信息
@classmethod
def from_settings(cls, settings):
dbparms = dict(
host=settings["MYSQL_HOST"],
db=settings['MYSQL_DBNAME'],
user=settings['MYSQL_USER'],
passwd=settings['MYSQL_PASSWORD'],
charset='utf8',
cursorclass=MySQLdb.cursors.DictCursor,
use_unicode=True
)
dbpool = adbapi.ConnectionPool("MySQLdb", **dbparms)
return cls(dbpool)
def process_item(self, item, spider):
#使用twisted将mysql插入编程异步执行
#第一个参数是我们定义的函数
query = self.dbpool.runInteraction(self.do_insert,item)
#错误处理
query.addErrorback(self.handle_error)
#错误处理函数
def handle_error(self,falure):
print(falure)
def do_insert(self,cursor,item):
#执行具体的插入
insert_sql = """
insert into jobbole_article(title,create_date,url,url_object_id,front_image_url
,comment_nums,fav_nums,praise_nums,content)
VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s)
"""
cursor.execute(insert_sql, (item['title'], item['create_date'], item['url'], item['url_object_id']
, item['front_image_url'], item['comment_nums']
, item['fav_nums'], item['praise_nums'], item["content"]))
最后一定要在setting中配置
#注,这个方法默认是被注释掉的
ITEM_PIPELINES = {
'AticleSpider.pipelines.MysqlTwistedPipeline': 1,
}
更多推荐
已为社区贡献1条内容
所有评论(0)