scrapy实战二:scrapy item pipeline组件实现细节

一、 scrapy item pipeline组件实现细节

 Scrapy存入MySQL或是其他数据库,虽然scrapy没有给我们提供拿来就用的类,但是她已经给我们实现了部分方法,我们继承它给我们实现的方法就能轻松的把数据存入你想存入的数据库,那我们要肿么继承呢?

其实就是编写一个pipeline组件,我们需要实现一个pipeline,实现了之后,我们蜘蛛爬取的数据(也就是item定义的内容),通过yield便提交给了pipeline,然后在pipeline里面就可以实现数据的:去重、存储。

名义上这里是说scrapy数据存储到mysql,但其实关键是介绍pipeline的编写方式,也就是学习我们要怎么在设置里设置pipeline、怎样在pipeline里面继承scrapy给我们提供的关于pipeline的方法、怎样创建对数据库的连接,好了,接下来我们一一来看!

1.继承pipeline必要方法:

如果我们要编写一个pipeline组件,如:MySQLPipline(命名随意,根据这个类的具体功能来即可),我们必须实现这个方法:

process_item(self, item, spider)

这个方法有两个参数,一个是item,一个是spider。

spider就是爬取数据的蜘蛛,item就是爬取到的数据,执行完数据库插入之后,需要执行返回,也就是需要:return item。

以上方法是必须要实现的方法,无论你是插入mysql、mongodb还是其他数据库,都必须实现这么一个方法;另外除了这么一个方法,scrapy还提供了另外两个:

open_spider(self, spider)
 
close_spider(self, spider)
 
可以看到,上面两个方法一个是蜘蛛打开的时候执行的,一个是关闭的时候执行的,上面的方法根据自己的需要,按需实现,并非必须方法!
 
2.MySQLPipline类具体实现 细节:
这个类就是python操作mysql的类,因此必须引入python操作mysql驱动,比如pymysql。
首先我们需要创建数据库的连接
import pymysql
class MySQLPipeline(object):
    def __init__(self):
        # 连接数据库
        self.connect = pymysql.connect(
            host='127.0.0.1',
            port=3306,
            user='root',
            passwd='123456',
            charset='utf8',
            db='yourdb',
            use_unicode=True
        )
        # 通过cursor执行增删查改
        self.cursor = self.connect.cursor()

    def process_item(self, item, spider):
        return item

 接下来我们就需要实现scrapy给我们提供的方法:process_item(self, item, spider)进行数据的存储,看一下具体实现:

    def process_item(self, item, spider):
        self.cursor.execute("insert into mytable(name,abc) value (%s,%s)",
                            (item['name'], item['abc']))
        # 提交sql语句
        self.connect.commit()
        return item #必须实现返回

3. settings.py启用MySQLPipline

在settings.py里面开启MySQLPipline

ITEM_PIPELINES = {
    'scrapyMysql.MySQLPipeline.MySQLPipeline': 1,
     #格式为:'项目名.文件名.类名':优先级(越小越大)
}

 

 

 

二、mysql实战

1.创建蜘蛛项目

scrapy startproject scrapyMysql

2.编写要存入数据库的字段item

import scrapy
class ScrapymysqlItem(scrapy.Item):
    tag = scrapy.Field()  # 标签字段
    cont = scrapy.Field()  # 名言内容

3.编写蜘蛛文件
进入scrapyMysql/scrapyMysql/spiders目录,创建蜘蛛文件,命名为:inputMysql.py然后在此文件中编写相应规则

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted on 2018-11-15 18:01  myworldworld  阅读(140)  评论(0)    收藏  举报

导航