首页 > 数据库 >Scrapy将数据存入excel和MySQL数据库中

Scrapy将数据存入excel和MySQL数据库中

时间:2023-05-17 19:23:18浏览次数:42  
标签:name db self excel spider item Scrapy MySQL def

一:Scrapy将爬到的数据存入MySQL数据库中

1.导入pymysql第三方库

pip install pymysql

2.连接数据库(itempipeline.py)

实现数据库的连接一般分为三个步骤:建立连接,操作数据,提交事务,关闭数据库。基本方法如下:

class Spider01Pipeline:     #连接数据库
    def __init__(self):
        pass

    def process_item(self,item,spider):   #操作数据
        pass

    def close_spider(self,spider):       #提交事务,关闭数据库
        pass

注意:Spider01Pipeline类里面的方法名不能错,不然爬虫框架不能识别。
在加入数据之前,要对数据在MySQL数据库中进行建表。

1.数据库进行连接

class Spider01Pipeline:
    def __init__(self):
        self.db_conn = pymysql.connect(host='localhost', user='root', password='123456', database='pachong',charset='utf8',use_unicode=True)   #连接数据库
        self.db_cur = self.db_conn.cursor()     #创建游标
        print('连接成功!')

host:服务器ip
user:用户名(不同的用户名权限不一样,可去MySQL里面修改查看)
password:登录MySQL的密码
database:数据库的名称
charset:字符集(utf8)
use_unicode:使用Unicode字符集并且设置字符编码为utf-8

2.操作(添加)数据

    def process_item(self,item,spider):
        value = (item['name'],item['content'])
        sql = "insert into mingrenmingyan(name,content) values (%s,%s)"   #为SQL语法,数据顺序要和建表一致
        self.db_cur.execute(sql,value)
        self.db_conn.commit()
        return item

self.db_cur.execute:进行数据插入(单条)
注:一定要返回数据项 return item ,不然后续找不到数据项

3.关闭数据库

    def close_spider(self,spider):
        self.db_cur.close()     #关闭游标
        self.db_conn.close()    #关闭数据库

4.完成Spider01Pipeline的编写后,需要在settings.py文件中找到管道配置并开启

ITEM_PIPELINES = {
   'spider01.pipelines.Spider01Pipeline': 300,
}

二:Scrapy将爬到的数据存入excel中

也分为三个步骤:建立工作表,操作数据,关闭excel

1.导入操作excel的第三方库openpyxl

pip install openpyxl

2.创建工作簿

1.创建工作表

class Spider02Pipeline:
    def __init__(self):
        self.wb = openpyxl.Workbook()    #工作簿
        # self.ws = self.wb.create_sheet() #创建工作表
        self.ws = self.wb.active         #激活默认工作表
        self.ws.title = '名人名言'         #工作表的名称
        self.ws.append(('姓名','名言'))    #加入表头

注:这个类也是在数据管道文件中,所以类名不能一样

2.操作数据

    def process_item(self,item,spider):
        name = item.get('name',' ')
        content = item.get('content',' ')
        self.ws.append((name,content))
        return item

3.保存文件

    def close_spider(self, spider):
        self.wb.save('名人名言.xlsx')    #文件名称存为名人名言

4.完成Spider02Pipeline的编写后,需要在settings.py文件中找到管道配置并开启

ITEM_PIPELINES = {
   'spider01.pipelines.Spider02Pipeline':290,
}

三:实例

使用CrawlSpider模板

http://quotes.toscrape.com/这个网站为例

爬虫文件quotes.py

import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule


class QuotesSpider(CrawlSpider):
    name = 'quotes'
    allowed_domains = ['quotes.toscrape.com']
    start_urls = ['http://quotes.toscrape.com/']
    rules = (
        Rule(LinkExtractor(restrict_xpaths=(r'//*[@class = "next"]/a')), callback='parse_item', follow=True), 
    ) #LinkExtractor为连接提取器,callback:回调方法,follow:是否跟进。当callback为None,默认fallow为True,否则Flase
    def parse_item(self, response):
        item = {}
        for row in response.xpath('/html/body/div/div[2]/div[1]/div'):
            item['content'] = row.xpath('span[1]/text()').get()
            item['name'] = row.xpath('span[2]/small/text()').get()
            # print(item)
            yield item

数据管道文件pipelines.py(同时将数据写入数据库和excel文件)


import pymysql
import openpyxl

class Spider01Pipeline:
    def __init__(self):
        self.db_conn = pymysql.connect(host='localhost', user='root', password='123456', database='pachong',charset='utf8',use_unicode=True)
        self.db_cur = self.db_conn.cursor()
        print('连接成功!')

    def process_item(self,item,spider):
        value = (item['name'],item['content'])
        sql = "insert into mingrenmingyan(name,content) values (%s,%s)"
        self.db_cur.execute(sql,value)
        self.db_conn.commit()
        return item

    def close_spider(self,spider):
        self.db_cur.close()
        self.db_conn.close()

class Spider02Pipeline:
    def __init__(self):
        self.wb = openpyxl.Workbook()    #工作簿
        # self.ws = self.wb.create_sheet() #创建工作表
        self.ws = self.wb.active         #激活默认工作表
        self.ws.title = '名人名言'         #工作表的名称
        self.ws.append(('姓名','名言'))    #加入表头

    def process_item(self,item,spider):
        name = item.get('name',' ')
        content = item.get('content',' ')
        self.ws.append((name,content))
        return item

    def close_spider(self, spider):
        self.wb.save('名人名言.xlsx')

文件配置settings.py

BOT_NAME = 'spider01'
USER_AGENTS = [
        "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)",
        "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)",
        "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)",
        "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)",
        "Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6",
        "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1",
        "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0",
        "Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5"]  #让浏览器认为你是人为登录

ROBOTSTXT_OBEY = False     #不遵守爬虫协议
LOG_LEVEL='WARNING'        #不开启日志

DOWNLOAD_DELAY = 3
RANDOMIZE_DOWNLOAD_DELAY=True      #开启随机时间延迟,防止网站屏蔽IP

ITEM_PIPELINES = {
   'spider01.pipelines.Spider01Pipeline': 300,
   'spider01.pipelines.Spider02Pipeline':290,
}#开启数据管道,同时将数据写入MySQL和excel文件中,字典的值越小优先级越高。

到这里,整个爬虫程序就写完了,下面只需要在终端开启爬虫

scrapy crawl quotes

*注:crawl后面跟的是运行爬虫的名称

标签:name,db,self,excel,spider,item,Scrapy,MySQL,def
From: https://www.cnblogs.com/yangsanhuo/p/yangsanhuobuhui.html

相关文章

  • MySQL远程登录的设置
    ​MySQL远程登录的设置在云平台上安装了MySQLdocker环境后,需要进行远程登录的设置。MySQL镜像为8.0(8.0以下的设置有一些区别),数据库用户为root。mysql-uroot-p(输入初始密码登录123456)#createuserroot@'%'identifiedby'cloudSpring091845@#';updateusersethost......
  • MySQL远程登录的设置
    ​MySQL远程登录的设置在云平台上安装了MySQLdocker环境后,需要进行远程登录的设置。MySQL镜像为8.0(8.0以下的设置有一些区别),数据库用户为root。mysql-uroot-p(输入初始密码登录123456)#createuserroot@'%'identifiedby'cloudSpring091845@#';updateusersethost......
  • mysql只有frm和ibd文件下如何恢复(表引擎为innodb)
    环境:OS:Centos7DB:mysql5.6说明:主库已经无法启动,表的引擎为innodb下面操作是在新服务器安装与原库同版本的db下进行 ###################已知表结构的情况######################1.创建同结构的表CREATETABLE`ad`(`id`bigint(20)NOTNULLAUTO_INCREMENT,`......
  • Mysql--数据的导入导出以及备份
    一、导入导出1.1、intooutfile(只导出数据)注意:mysql5.7+版本,secure_file_priv的值默认为NULL,即不允许导入或导出,需在/etc/my.cnf添加  secure_file_priv='' 或者  secure_file_priv='指定目录'  ,重启mysql1.1.1导出select*fromtable_nameintooutfile'f......
  • excel-08-Excel函数由浅入深-Excel函数
    Excel函数填充定义:是Excel中的内置函数,使用时,不区分大小写且每个函数都有其特定的功能和用途结构:以“=”为引导,函数名称开始,后接左括号,然后以逗号分隔输入的参数,最后是右括号。分类:共包含11类,分别是数据库函数,日期与时间函数、工程函数、财务函数、信息函数、逻辑函数、查询......
  • excel-09-Excel函数由浅入深-逻辑函数
    逻辑函数定义:根据指定的条件进行判断,如果一个条件满足,就给出结果。公式描述AND并且(同时满足)OR或者(满足其中一个)IF逻辑判断AND/OR/IF(logical1,[logical2,...])​ logical1必需,需要检验的第一个条件​ logical2可选,需要检验的其他条件......
  • excel-10-Excel函数由浅入深-排序函数
    排序函数函数名意义LARGE从大到小排序SAMLL从小到大排序RANK相同数字排位是1个,紧邻后面数字会跳跃RANK.avg多个值具有相同排位,则返回平均排位RANK.eq多个值具有相同排位,则返回数组最高排位​ Large(Array,K)-Array必选,数组或数组区域-K必选,K......
  • excel-06-Excel函数由浅入深
    Excel函数由浅入深-掌握函数的写法机器基本结构-了解单元格地址的引用以及在函数中的应用-熟练各类函数的作用以及函数的使用场景知识点Excel公式Excel函数逻辑函数统计函数日期函数文本函数排名与排序函数查找与引用函数......
  • excel-07-Excel函数由浅入深-Excel公式
    Excel公式定义:用加减乘除等运算符号,把一些数值、文本、函数等组合在一起,得出一个结果的数学算式。输入方法:手工输入与单元格引入手工输入:在的那远哥输入等号“=”,再输入公式,其中在编辑栏会出现公式具体表达,单元格会显示公式的表达结果。单元格引入:手动输入字符串,但是指定......
  • excel-04-筛选、排序与分列
    筛选、排序与分列分列分列分为分隔符号与固定宽度俩种分隔符号:适用于数据源带有某些特定的符号:逗号、冒号、空格按照单个分隔符分列按照多个分隔符分列固定宽度:主要适用于数据源比较整齐划一,数据排列有规律不规则没有连接符:通过替换与分列相结合......