使用异步写入数据库的原因:
1.同步: 同步写入数据速度比较慢, 而爬虫速度比较快, 可能导致数据最后写不到数据库中。
2. 异步: 是将爬虫的数据先放到一个连接池中, 再同时将连接池的数据写入到数据库中, 这样既可以提高数据库的写入速度, 同时也可以将爬取到的所有数据都写到数据库中, 保证数据的完整性。
异步写入流程:
- 在settings中配置Mysql链接需要的参数
- 自定义Pipeline,实现from_settings函数
- from twisted.enterprise import adbapi 引入连接池模块
- from pymysql import cursors 引入游标模块
- 在from_settings中,准备链接数据库参数,创建db_pool连接池,创建返回当前类的对象,传入db_pool
- 实现初始化函数,在初始化函数中,将db_pool赋值self的属性
- 实现process_item函数
7.1 query = self.db_pool.runInteraction(执行插入数据操作的函数对象,函数需要参数),并接受执行返回结果
7.2 query.addErrback(错误回调函数,函数需要参数),添加执行sql失败回调的函数,在回调函数中对错误数据进一步处理 - 实现插入数据操作的函数,准备sql,执行sql
- 实现错误回调函数,在回调函数中对错误数据进一步处理
具体代码如下:
From twisted.enterprise