【Scrapy pipeline 存入数据到mysql 】mysql的实践笔记,以及模板代码

第一个实践笔记  基础模板

setting.py

BOT_NAME = 'bgmSpider'
SPIDER_MODULES = ['bgmSpider.spiders']
NEWSPIDER_MODULE = 'bgmSpider.spiders'
ROBOTSTXT_OBEY = True
ITEM_PIPELINES = {
   'bgmSpider.pipelines.BgmspiderPipeline': 300,
}

MYSQL_HOST = YOUR_HOST
MYSQL_DBNAME = YOUR_DBNAME
MYSQL_USER = YOUR_USERNAME
MYSQL_PASSWD = YOUR_PASSWD

pipeline.py

from scrapy.pipelines.files import FilesPipeline
from urllib.parse import urlparse
from bgmSpider import settings
import pymysql

class BgmspiderPipeline(object):
    def __init__(self):
        self.connect = pymysql.connect(
            host=settings.MYSQL_HOST,
            db=settings.MYSQL_DBNAME,
            user=settings.MYSQL_USER,
            passwd=settings.MYSQL_PASSWD,
            use_unicode=True)
        self.cursor = self.connect.cursor()

    def process_item(self, item, spider):
        if spider.name == 'bgm':
            self.cursor.execute(
                'insert ignore into bgm (bgm_name,bgm_cat,bgm_tag,bgm_time,bgm_music,bgm_link,bgm_img) values (%s,%s,%s,%s,%s,%s,%s)',
                (item['bgm_name'],item['bgm_cat'],item['bgm_tag'],item['bgm_time'],item['bgm_music'],
                 item['bgm_link'],item['bgm_img']))
            self.connect.commit()
        return item

     第二个实践笔记     

scrapy同步存储mysql数据基本items.py

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

# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.html

import scrapy


class Scrapydemo11Item(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    phone=scrapy.Field()
    price=scrapy.Field()

基本pipeline.py

#第一步必须做的是是引入pymysql模块
import pymysql

class BasicdemoPipeline(object):
    def open_spider(self, spider):
        db = spider.settings.get('MYSQL_DB_NAME','test1')
        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', '')
#第二步是引入连接数据库,pymysql.connect过程中传入多个参数:数据库主机名(默认为本地主机),数据库登录名(默认为当前用户),数据库密码(默认为空),要打开的数据库名称(无默认,可缺省),MySQL使用的TCP端口(默认为3306,可缺省),数据库字符编码(可缺省),self后边的连接名称可以自取名
        self.db_conn =pymysql.connect(host=host, port=port, db=db, user=user, passwd=passwd, charset='utf8')
#第三步 获取游标self.连接名.cursor(),游标就像是鼠标一样,后续操作数据库全部靠游标,使用游标的execute命令来执行。
        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):
        values = (
            item['title'][0],
            item['article'][0],
        )
        print("Insert 成功了")
        sql = 'INSERT INTO boods(dd,ff) VALUES(%s,%s)'
#第四步 用游标执行数据库命令
        self.db_cur.execute(sql, values)

setting.py

ITEM_PIPELINES = {
    'scrapydemo11.pipelines.Scrapydemo11Pipeline': 300,
}
#激活pipelines

爬虫文件要与数据库sql语句相一致。另外创建数据库的时候一定要定义一个字段当,属性int,自动递增。如下图

     第二个实践笔记     

异步操作存入数据库

关键的是pipeline.py文件

# -*- coding: utf-8 -*-
import pymysql
# 使用twsited异步IO框架,实现数据的异步写入。
from pymysql import cursors
from twisted.enterprise import adbapi
class BasicdemoTPipeline(object):
    def __init__(self):
        dbparams = {
            'host': 'localhost',
            'port': 3306,
            'user': 'root',
            'password': '',
            'database': 'test1',
            'charset': 'utf8',
            'cursorclass': cursors.DictCursor  # 指定cursor的类
        }
    #初始化数据库连接池,参数1是mysql的驱动,参数2是连接mysql的配置信息
        self.db_pool = adbapi.ConnectionPool('pymysql', **dbparams)
    #sql语言的空值
        self._sql = None

    @property
    def sql(self):
        if not self._sql:
            self._sql = 'INSERT INTO boods(dd,ff) VALUES(%s,%s)'
            return self._sql
        return self._sql

    def process_item(self, item, spider):
        #操作数据,将数据写入数据库
        #如果是同步写入的话,使用的是cursor.execute(),commit()
        #异步存储的方式:函数方式pool.map(self.insert_db,[1,2])
        query = self.db_pool.runInteraction(self.insert_db,item)
        query.addErrback(self.handle_error, item, spider)
    def insert_db(self,cursor, item):
        for i in range(len(item['title'])) :
            values = (
                item['title'][i],
                item['article'][i],
            )
            print("Insert 成功了")
            cursor.execute(self.sql, values)
    def handle_error(self,error,item,spider):
        print('='*10 + "error" + '='*10)
        print(error)
        print('=' * 10 + "error" + '=' * 10)

     第三个实践笔记     

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Python编写一个Scrapy爬虫来爬取数据,并将数据存储到MySQL数据库中。首先需要安装MySQL连接库,例如mysql-connector-python。然后在Scrapy爬虫的piplines.py文件中增加一个MySQL Pipeline,以便将数据存储到MySQL数据库中。此外,还需要添加MySQL数据库的连接信息和表结构信息,以便能够正确地连接数据库和将数据存储到正确的表和字段中。以下是一个示例: ``` python import mysql.connector class MySQLPipeline(object): def __init__(self, mysql_host, mysql_username, mysql_password, mysql_database): self.mysql_host = mysql_host self.mysql_username = mysql_username self.mysql_password = mysql_password self.mysql_database = mysql_database @classmethod def from_crawler(cls, crawler): mysql_host = crawler.settings.get('MYSQL_HOST', 'localhost') mysql_username = crawler.settings.get('MYSQL_USERNAME', 'root') mysql_password = crawler.settings.get('MYSQL_PASSWORD', '') mysql_database = crawler.settings.get('MYSQL_DATABASE', 'test') return cls(mysql_host, mysql_username, mysql_password, mysql_database) def open_spider(self, spider): self.connection = mysql.connector.connect( host=self.mysql_host, user=self.mysql_username, password=self.mysql_password, database=self.mysql_database ) self.cursor = self.connection.cursor() def close_spider(self, spider): self.cursor.close() self.connection.close() def process_item(self, item, spider): sql = "INSERT INTO table_name (column1, column2, column3) VALUES (%s, %s, %s)" values = (item['column1'], item['column2'], item['column3']) self.cursor.execute(sql, values) self.connection.commit() return item ``` 其中,MYSQL_HOST、MYSQL_USERNAME、MYSQL_PASSWORD和MYSQL_DATABASE是在Scrapy的settings.py文件中设置的变量,用于配置MySQL连接信息。在Scrapy的Spider中,通过yield发送数据MySQL Pipeline进行处理。例如: ``` python class MySpider(Spider): name = 'my_spider' start_urls = ['http://www.example.com'] def parse(self, response): items = response.xpath('//div[contains(@class, "item")]') for item in items: # 解析数据 column1 = item.xpath('a/text()').extract_first().strip() column2 = item.xpath('p/text()').extract_first().strip() column3 = item.xpath('span/text()').extract_first().strip() # 将数据发送给MySQL Pipeline yield { 'column1': column1, 'column2': column2, 'column3': column3 } ``` 这样就可以将Scrapy爬虫爬取的数据存储到MySQL数据库中了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值