Scrapy中连接MySQL所需要做的工作如下:

1.settings中需要设置的部分

# 启动管道组件
ITEM_PIPELINES = {
'QianChengWuYu.mongoDBPiplelines.MongoDBPipline': 300,
}
# mysql的连接参数
MYSQL_DB_NAME = 'qianchengwuyu'
MYSQL_HOST = 'localhost'
MYSQL_USER = ''
MYSQL_PASSWORD = ''

(1)其中ITEM_PIPELINES中设置的是QianChengWuyu项目中的管道文件mongoDBPiplelines中的MongoDBPipline类,优先级是300

(2)其中MYSQL_DB_NAME 为mysql中的数据库,MYSQL_HOST 为指定登录的IP 这里是localhost;

以及MYSQL_USER 为数据库用户名,MYSQL_PASSWORD 为数据库用户密码

2.scrapy中piplines文件如下:

1)正常插入,导入pymysql模块

import pymysql

"""
这个类用于scrapy中数据向MYSQL数据库中插入数据
"""
class QianchengwuyuPipeline(object): def open_spider(self, spider):
        """
        该方法用于创建数据库连接池对象并连接数据库
        """
db = spider.settings.get('MYSQL_DB_NAME', 'scrapy_default')
host = spider.settings.get('MYSQL_HOST', 'localhost')
port = spider.settings.get('MYSQL_PORT', 3306)
user = spider.settings.get('MYSQL_USER', 'root')
passwd = spider.settings.get('MYSQL_PASSWORD', 'root') self.db_conn = pymysql.connect(host=host, port=port, db=db, user=user, passwd=passwd, charset='utf8')
self.db_cur = self.db_conn.cursor() def close_spider(self, spider):
        """
        该方法用于数据插入以及关闭数据库
        """
self.db_conn.commit()
self.db_conn.close() def process_item(self, item, spider):
self.insert_db(item) return item def insert_db(self, item):
        """
        sql语句构造方法
        """
values =(
item['job'],
item['company'],
item['place'],
item['salary']
) sql = 'INSERT INTO jobs(job,company,place,salary) VALUES(%s,%s,%s,%s)'
self.db_cur.execute(sql, values)

2)异步插入,使用twisted异步插入

"""
这个类用于scrapy中数据向MYSQL数据库中异步插入数据
"""
from twisted.enterprise import adbapi class MySQLsyncPipeline(object): def open_spider(self, spider):
"""
该方法用于创建数据库连接池对象并连接数据库
"""
db = spider.settings.get('MYSQL_DB_NAME', 'scrapy_default')
host = spider.settings.get('MYSQL_HOST', 'localhost')
port = spider.settings.get('MYSQL_PORT', 3306)
user = spider.settings.get('MYSQL_USER', 'root')
passwd = spider.settings.get('MYSQL_PASSWORD', 'root') self.dbpool = adbapi.ConnectionPool('pymysql', host=host, db=db, user=user, password=passwd, charset='utf8') def close_spider(self, spider):
"""
该方法用于数据插入完成后关闭数据库
"""
self.dbpool.close() def process_item(self, item, spider):
"""
插入数据库方法
"""
self.dbpool.runInteraction(self.insert_db, item) return item def insert_db(self, tx, item):
"""
sql语句构造方法
"""
values = (
item['job'],
item['company'],
item['place'],
item['salary']
) sql = 'INSERT INTO jobs(job, company, place,salary) VALUES(%s,%s,%s,%s)'
tx.execute(sql, values)

scrapy连接MySQL的更多相关文章

  1. Scrapy连接到各类数据库(SQLite,Mysql,Mongodb,Redis)

    如何使用scrapy连接到(SQLite,Mysql,Mongodb,Redis)数据库,并把爬取的数据存储到相应的数据库中. 一.SQLite 1.修改pipelines.py文件加入如下代码 # ...

  2. nodejs进阶(6)—连接MySQL数据库

    1. 建库连库 连接MySQL数据库需要安装支持 npm install mysql 我们需要提前安装按mysql sever端 建一个数据库mydb1 mysql> CREATE DATABA ...

  3. 【初学python】使用python连接mysql数据查询结果并显示

    因为测试工作经常需要与后台数据库进行数据比较和统计,所以采用python编写连接数据库脚本方便测试,提高工作效率,脚本如下(python连接mysql需要引入第三方库MySQLdb,百度下载安装) # ...

  4. Node.js Express连接mysql完整的登陆注册系统(windows)

    windows学习环境: node 版本: v0.10.35 express版本:4.10.0 mysql版本:5.6.21-log 第一部分:安装node .Express(win8系统 需要&qu ...

  5. PDO连接mysql数据库

    1.PDO简介 PDO(PHP Data Object) 是PHP 5 中加入的东西,是PHP 5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连接 ...

  6. 使用ABP EntityFramework连接MySQL数据库

    ASP.NET Boilerplate(简称ABP)是在.Net平台下一个很流行的DDD框架,该框架已经为我们提供了大量的函数,非常方便与搭建企业应用. 关于这个框架的介绍我就不多说,有兴趣的可以参见 ...

  7. jmeter之连接mysql和SQL Server配置

    下载jdbc驱动 在使用jmeter做性能或自动化测试的时候,往往需要直接对数据库施加压力,或者某些参数只能从数据库获取,这时候就必须使用jmeter连接数据库. 1.下载对应的驱动包 mysql驱动 ...

  8. Windows操作系统下远程连接MySQL数据库

    用Eclipse做一个后台项目,但是数据库不想放在本地电脑,于是买了一个腾讯云服务器(学生有优惠,挺便宜的),装上MySQL数据库,但是测试连接的时候,发现总是连接不是上,但是本地数据库可以连接,于是 ...

  9. Hibernate连接mysql数据库的配置

    <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hi ...

随机推荐

  1. 启动图。引导页以及EAIntroView的使用

    ios启动图: 1242 x 2208 (6plus)    R5.5位置 750 x 1334   (6)           R4.7位置 640 x 960     (4/4s)      2x ...

  2. 不同Hadoop模式下,Hive元数据文件存储位置

    假如在hive的配置文件hive-site.xml中,属性hive.metastore.warehouse.dir被设置为/root/hive/warehouse. 如果Hadoop是本地模式,则仓库 ...

  3. Runnable和Thread实现多线程的区别(含代码)

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17161237 Java中实现多线程有两种方法:继承Thread类.实现Runnable接口 ...

  4. LoadRunner11学习记录四 -- 集合点

    LoadRunner集合点的设置: 我们来想象一个场景,10名运动员参加长跑比赛,出发点同时起跑,他们是并排奔跑的:跑了N圈之后,因为有体能更强的,有体能稍弱的,他们的队形并排变成了前后.几乎一个跑道 ...

  5. Luogu 4238 【模板】多项式求逆

    疯狂补板中. 考虑倍增实现. 假设多项式只有一个常数项,直接对它逆元就可以了. 现在假如要求$G(x)$ $$F(x)G(x) \equiv 1 (\mod x^n)$$ 而我们已经求出了$H(x)$ ...

  6. <<C++标准程序库>>中的STL简单学习笔记

    0. 内容为个人学习笔记, 仅供参考, 如有错漏, 欢迎指正! 1. STL中的所有组件都是由模板构成的, 所以其元素可以是任意型别的. 组件有: - 容器: 管理某类对象的集合. 不同的容器有各自的 ...

  7. 网站如何集成Facebook和Twitter第三方登录

    最近公司要求做海外的第三方登录:目前只做了Facebook和Twitter;国内百度到的信息太少VPN FQ百度+Google了很久终于弄好了.但是做第三方登录基本上都有个特点就是引入必须的js,设置 ...

  8. aspnetcore的那些actionresult们

    比MVC5多了n个actionresult,傻傻分不清,整理了下,妈妈再也不用担心了 https://docs.asp.net/projects/api/en/latest/autoapi/Micro ...

  9. 36 有n个整数,使其前面各数顺序向后移n个位置,最后m个数变成最前面的m个数

    题目:有n个整数,使其前面各数顺序向后移n个位置,最后m个数变成最前面的m个数 public class _036ExchangeSite { public static void main(Stri ...

  10. C++学习--入口函数

    在学习第一个C++程序的时候发现控制台程序的入口函数是int _tmain而不是main,查了资料才发现_tmain()是为了支持unicode所使用的main一个别名,宏定义在<stdafx. ...