Scrapy用Twisted异步操作Mysql

来源:互联网 发布:网站程序员培训中心 编辑:程序博客网 时间:2024/06/05 13:34

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,}
原创粉丝点击