scrapy框架 基于mysql数据库储存数据方法、案例

流程思路

  1. 将解析数据存到items对象
  2. 使用yield 将items交给管道文件处理
  3. 在管道文件pipelines编写代码储存到数据库
  4. 在setting配置文件开启管道

案例

items中

  • 按照格式定义字段
import scrapy

class QiubaiproItem(scrapy.Item):
    # 语法:  字段 = scrapy.Field()
    author = scrapy.Field()
    content = scrapy.Field()

setting中

  • 解开注释
ITEM_PIPELINES = {
   'qiubaiPro.pipelines.QiubaiproPipeline': 300,  # 300优先级
}

爬虫文件中

  • 必须导入items 中的类
  • 将数据录入item
  • 用yield item提交给管道
import scrapy
from qiubaiPro.items import QiubaiproItem


class QiubaiSpider(scrapy.Spider):
    name = 'qiubai'
    # allowed_domains = ['qiushibaike.com/text']  # 图片可能不是该域名下
    start_urls = ['https://www.qiushibaike.com/text/']  # https 要注意

    def parse(self, response):
        # 取段子列表
        div_list = response.xpath("//div[@id='content-left']/div")

        # 存储解析到的页面数据
        data_list = []
        for div in div_list:
            # xpath解析的内容存储到 selector对象中,获取内容.extract()
            # extract_first()获取内容  =  .extract()[0]
            author = div.xpath("./div/a[2]/h2/text()").extract()[0]  # 或extract_first()
            content = div.xpath(".//div[@class='content']/span/text()").extract_first()

            # 1.数据解析到items对象(先导入)
            item = QiubaiproItem()
            item['author'] = author
            item['content'] = content

            # 2.将item对象提交给管道
            yield item

管道pipelines中

  1. 现在数据库中创建对应格式的表
  2. 导入pymysql包
  3. 在open_spider中链接数据库
  4. 利用pymysql进行数据录入
  5. 用try捕获并回滚错误
  6. 在close_spider中关闭数据库
import pymysql


class QiubaiproPipeline(object):
    conn = None
    cursor = None  # 游标对象

    # 1. 链接数据库
    # 2. 执行sql语句
    # 3. 提交

    # 爬虫开始执行
    def open_spider(self, spider):
        print('开始爬虫,链接数据库')
        self.conn = pymysql.Connect(
            host='127.0.0.1',
            port=3306,
            user='root',
            password='123',
            db='qiubai',
        )

    # 对提交的item对象,mysql数据库储存
    # 爬虫每次提交item,该方法被执行一次
    def process_item(self, item, spider):

        # 写sql语句 往qiubai这个表中插数据,没有表的话要先在数据库创建
        sql = 'insert into qiubai values("%s","%s")' % (item['author'], item['content'])

        # 创建游标对象
        self.cursor = self.conn.cursor()

        # 提交事务
        try:
            self.cursor.execute(sql)
            self.conn.commit()
        except Exception as e:
            print(e)
            print('异常回滚')
            self.conn.rollback()

        return item

    # 结束爬虫时调用
    def close_spider(self, spider):
        print('爬虫结束')
        self.cursor.close()
        self.conn.close()

猜你喜欢

转载自blog.csdn.net/weixin_42329277/article/details/84112829
今日推荐