概述
以爬取豆瓣读书Top250排行榜为例。
关键是使用Twisted框架的adbapi,创建数据库连接池对象,然后使用这个数据库连接池对象进行数据库操作,
这样就实现了数据存储的异步方案。
核心代码如下:
1.使用Twisted中的adbapi获取数据库连接池对象。
参数“pymsql”为使用的数据库引擎名字,params与直接使用pymsql.connect(params)
连接数据库时相同
self.dbpool=adbapi.ConnectionPool('pymysql',**params)
2.使用数据库连接池对象进行数据库操作,自动传递cursor对象到数据库操作方法的第一个参数,
query=self.dbpool.runInteraction(self.do_insert,item)
也可以设置出错时的回调方法,自动传递出错消息对象failure到错误处理方法的第一个参数
query.addErrback(self.on_error,spider)
代码
items.py
class DoubanbookItem(scrapy.Item):
# 图书详情页链接
link=scrapy.Field()
# 图书名称
title=scrapy.Field()
# 作者,出版信息,价格等信息
info=scrapy.Field()
# 豆瓣评分
rating=scrapy.Field()
# 引论
quote=scrapy.Field()
spider
# !/usr/bin/env python
# -*- coding:utf-8 -*-
import scrapy
from myscrapy.items import DoubanbookItem
class DoubanbookSpider(scrapy.Spider):