scrapy 异步存储mysql_scrapy 异步存储mysql

本文介绍了如何在Scrapy爬虫项目中实现MySQL的异步存储,通过设置数据库连接信息,创建自定义的pipeline,利用twisted库的adbapi实现异步交互,避免因同步写入导致的数据处理阻塞。详细步骤包括设置数据库参数,定义异步连接类,重写process_item方法,处理错误以及插入数据的SQL操作。
摘要由CSDN通过智能技术生成

1、在setting中设置MySQL连接信息

HOST='101.201.70.139'

MYSQL_DBNAME='anttest'

MYSQL_PASSWORD='Myjr678!@#'

MYSQL_USER='root'

2、在pipeline中添加mysql异步连接类

from twisted.enterprise import adbapi

import MySQLdb

from MySQLdb import cursors

class mysqlTwistedpipline(object):

def __init__(self,dbpool):

self.dbpool=dbpool

@classmethod

def from_settings(cls,settings):

dbparms = dict(

host = settings['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)

3、重写process_item方法

def process_item(self, item, spider):

query = self.dbpool.runInteraction(self.do_insert,item)

query.addErrback(self.handle_error)

4.定义错误处理

def handle_error(self,failure):

print failure

5、添加向数据库添加数据的方法

def do_insert(self,cursor,item):

SQL插入语句

无需输入conn.commit

6、在setting.py中添加item——pipeline路径

#完整文件

# -*- coding: utf-8 -*-

# Define your item pipelines here

#

# Don't forget to add your pipeline to the ITEM_PIPELINES setting

# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html

from twisted.enterprise import adbapi

import MySQLdb

from MySQLdb import cursors

class ZhongguosoudiPipeline(object):

def process_item(self, item, spider):

return item

class mysqlTwistedpipline(object):

def __init__(self,dbpool):

self.dbpool=dbpool

@classmethod

def from_settings(cls,settings):

dbparms = dict(

host = settings['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):

query = self.dbpool.runInteraction(self.do_insert,item)

query.addErrback(self.handle_error)

def handle_error(self,failure):

print failure

def do_insert(self,cursor,item):

sql_in = 'insert into land_deals(title,publish_date,province_id,province_name,articles_link,content,create_time,transact_status)VALUES ("%s","%s","%d","%s","%s","%s",now(),"%d")'%(item['title'],item['publish_time'],0,"",item['url'],item['con'].replace('"','\''),1)

cursor.execute(sql_in)

scrapy 数据存储mysql

#spider.pyfrom scrapy.linkextractors import LinkExtractor from scrapy.spiders import CrawlSpider, Ru ...

scrapy存储mysql

scrapy 数据存储mysql   #spider.pyfrom scrapy.linkextractors import LinkExtractor from scrapy.spiders imp ...

python连接数据库异步存储

当同步写入数据库时,可能会发生下载速度很快,但是写入速度很慢的情况,因此我们采用异步存储写入数据库. 实现异步写入mysql数据库的思路: 1,将数据库的连接数据写入到settings文件中,供后面自 ...

Scrapy持久化存储-爬取数据转义

Scrapy持久化存储 爬虫爬取数据转义问题 使用这种格式,会自动帮我们转义 'insert into wen values(%s,%s)',(item['title'],item['content' ...

python3下scrapy爬虫(第十二卷:解决scrapy数据存储大量数据时阻塞问题)

之前我们使用scrapy爬取数据,用的存储方式是直接引入PYMYSQL,或者MYSQLDB,案例中数据量并不大,这种数据存储方式属于同步过程,也就是上一条语句执行完才能执行下一条语句,当数据量变大时, ...

使用异步存储提升 Web 应用程序的离线体验

localForage 是一个 JavaScript 库,通过使用简单的.类似 localStorage 风格的 API 实现异步存储,帮助你提升 Web 应用程序的离线经验(通过 IndexedDB ...

分布式数据存储 - MySQL双主复制

上篇文章,我们说到MySQL主从复制很好的保障了从库,读的高可用性.so,问题来了: 1.针对主库,写的高可用性又是如何做到高可用性? 2.如果需 ...

Gearman + Nodejs + MySQL UDF异步实现 MySQL 到 Redis 的数据同步

[TOC] 1, 环境 CentOS, MySQL, Redis, Nodejs 2, Redis简介 Redis是一个开源的K-V内存数据库,它的key可以是string/set/hash/list ...

React Native 异步存储

异步存储 http://blog.csdn.net/yulianlin/article/details/52473456

随机推荐

linux挂着U盘和光盘

挂载光盘 mkdir /mnt/cdrom/ (建立挂载点) mount -t iso9660 /dev/cdrom /mnt/cdrom (挂载光盘) mount /dev/sr0 /mnt/cdr ...

Jbrowse安装和序列、bam、vcf配置

最近做了一个关于基因开发的项目,要求最终输出的文件可以在专门的基因浏览器上边显示,类似统计图的东西.废话不说上图(表示表达不出来0.0)! 先说下Jbrowse这个东西吧,一句话:一个简单的,便携式依 ...

python学习笔记七 初识socket(进阶篇)

socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. sock ...

关于错误提示:此实现不是 Windows 平台 FIPS 验证的加密算法的一部分的解决方案

vs上的一个项目,弄了一个aes加密算法.提示说:调用的目标异常.此实现不是 Windows 平台 FIPS 验证的加密算法的一部分.弄了好久一直不行.解决不了.最后找了半天资料终于解决了.估计下来. ...

C和C++混合编译

关于extern_C 通常,在C语言的头文件中经常可以看到类似下面这种形式的代码: #ifdef __cplusplus extern "C" { #endif /**** som ...

java_闭包和回调实现一边按键盘一边演讲

package ming; interface Teachable { void work(); } class Programer { private String name; public Str ...

bzoj1389

比较有意思的一道题初看肯定是dp一类,但好像没什么思路,先令p=1-p q=1-q如果我们用常见的f[i]到第i次试验最大利润的话我们发现不好转移,因为影响因素不仅有价格,还有数量考虑到原料总量一定, ...

查找字符在字符串中第N次出现的位置

1.查找字符串 @find 在字符串 @str 中第 (@n) 次出现的位置.没有第 (@n) 次返回 0. 返回@find在@str中第(@n)次出现的位置.没有第(@n)次返回0. ), ), ...

python sys.modules模块

sys.modules是一个全局字典,该字典是python启动后就加载在内存中.每当程序员导入新的模块,sys.modules都将记录这些模块.字典sys.modules对于加载模块起到了缓冲的作用. ...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值