scrapy操作MySQL数据库

使用scrapy框架爬取数据入库mysql 第一次使用scrapy框架完成数据爬取 阅读详情

scrapy爬虫框架简单Demo

转载自:http://blog.youkuaiyun.com/u013082989/article/details/52589791

github地址:https://github.com/lawlite19/PythonCrawler-Scrapy-Mysql-File-Template

使用scrapy爬虫框架将数据保存MySQL数据库和文件中

settings.py

  • 修改Mysql的配置信息
#Mysql数据库的配置信息
MYSQL_HOST = '127.0.0.1'
MYSQL_DBNAME = 'testdb'         #数据库名字,请修改
MYSQL_USER = 'root'             #数据库账号,请修改 
MYSQL_PASSWD = '123456'         #数据库密码,请修改

MYSQL_PORT = 3306               #数据库端口,在dbhelper中使用
  
      • 指定pipelines
      ITEM_PIPELINES = {
          'webCrawler_scrapy.pipelines.WebcrawlerScrapyPipeline': 300,#保存到mysql数据库
          'webCrawler_scrapy.pipelines.JsonWithEncodingPipeline': 300,#保存到文件中
      }
        

          items.py

          • 声明需要格式化处理的字段
          class WebcrawlerScrapyItem(scrapy.Item):
              '''定义需要格式化的内容(或是需要保存到数据库的字段)'''
              # define the fields for your item here like:
              # name = scrapy.Field()
              name = scrapy.Field()   #修改你所需要的字段
              url = scrapy.Field()
            

              pipelines.py

              一、保存到数据库的类WebcrawlerScrapyPipeline(在settings中声明)

              • 定义一个类方法from_settings,得到settings中的Mysql数据库配置信息,得到数据库连接池dbpool
                  @classmethod
                  def from_settings(cls,settings):
                      '''1、@classmethod声明一个类方法,而对于平常我们见到的则叫做实例方法。 
                         2、类方法的第一个参数cls(class的缩写,指这个类本身),而实例方法的第一个参数是self,表示该类的一个实例
                         3、可以通过类来调用,就像C.f(),相当于java中的静态方法'''
                      dbparams=dict(
                          host=settings['MYSQL_HOST'],#读取settings中的配置
                          db=settings['MYSQL_DBNAME'],
                          user=settings['MYSQL_USER'],
                          passwd=settings['MYSQL_PASSWD'],
                          charset='utf8',#编码要加上,否则可能出现中文乱码问题
                          cursorclass=MySQLdb.cursors.DictCursor,
                          use_unicode=False,
                      )
                      dbpool=adbapi.ConnectionPool('MySQLdb',**dbparams)#**表示将字典扩展为关键字参数,相当于host=xxx,db=yyy....
                      return cls(dbpool)#相当于dbpool付给了这个类,self中可以得到
                
                  • __init__中会得到连接池dbpool
                      def __init__(self,dbpool):
                          self.dbpool=dbpool
                    
                  • 1
                  • 2
                  • 1
                  • 2
                  • process_item方法是pipeline默认调用的,进行数据库操作
                      #pipeline默认调用
                      def process_item(self, item, spider):
                          query=self.dbpool.runInteraction(self._conditional_insert,item)#调用插入的方法
                          query.addErrback(self._handle_error,item,spider)#调用异常处理方法
                          return item
                    
                      • 插入数据库方法_conditional_insert
                          #写入数据库中
                          def _conditional_insert(self,tx,item):
                              #print item['name']
                              sql="insert into testpictures(name,url) values(%s,%s)"
                              params=(item["name"],item["url"])
                              tx.execute(sql,params)
                        
                          • 错误处理方法_handle_error
                              #错误处理方法
                              def _handle_error(self, failue, item, spider):
                                  print failue
                            

                              二、保存到文件中的类JsonWithEncodingPipeline(在settings中声明)

                              • 保存为json格式的文件,比较简单,代码如下
                              class JsonWithEncodingPipeline(object):
                                  '''保存到文件中对应的class
                                     1、在settings.py文件中配置
                                     2、在自己实现的爬虫类中yield item,会自动执行'''    
                                  def __init__(self):
                                      self.file = codecs.open('info.json', 'w', encoding='utf-8')#保存为json文件
                                  def process_item(self, item, spider):
                                      line = json.dumps(dict(item)) + "\n"#转为json的
                                      self.file.write(line)#写入文件中
                                      return item
                                  def spider_closed(self, spider):#爬虫结束时关闭文件
                                      self.file.close()
                                

                                  dbhelper.py

                                  • 自己实现的操作Mysql数据库的类
                                  • init方法,获取settings配置文件中的信息
                                      def __init__(self):
                                          self.settings=get_project_settings() #获取settings配置,设置需要的信息
                                  
                                          self.host=self.settings['MYSQL_HOST']
                                          self.port=self.settings['MYSQL_PORT']
                                          self.user=self.settings['MYSQL_USER']
                                          self.passwd=self.settings['MYSQL_PASSWD']
                                          self.db=self.settings['MYSQL_DBNAME']
                                    
                                      • 连接到Mysql
                                          #连接到mysql,不是连接到具体的数据库
                                          def connectMysql(self):
                                              conn=MySQLdb.connect(host=self.host,
                                                                   port=self.port,
                                                                   user=self.user,
                                                                   passwd=self.passwd,
                                                                   #db=self.db,不指定数据库名
                                                                   charset='utf8') #要指定编码,否则中文可能乱码
                                              return conn
                                        
                                          • 连接到settings配置文件中的数据库名(MYSQL_DBNAME)
                                              #连接到具体的数据库(settings中设置的MYSQL_DBNAME)
                                              def connectDatabase(self):
                                                  conn=MySQLdb.connect(host=self.host,
                                                                       port=self.port,
                                                                       user=self.user,
                                                                       passwd=self.passwd,
                                                                       db=self.db,
                                                                       charset='utf8') #要指定编码,否则中文可能乱码
                                                  return conn 
                                            
                                              • 创建数据库(settings文件中配置的数据库名)
                                                  #创建数据库
                                                  def createDatabase(self):
                                                      '''因为创建数据库直接修改settings中的配置MYSQL_DBNAME即可,所以就不要传sql语句了'''
                                                      conn=self.connectMysql()#连接数据库
                                              
                                                      sql="create database if not exists "+self.db
                                                      cur=conn.cursor()
                                                      cur.execute(sql)#执行sql语句
                                                      cur.close()
                                                      conn.close()
                                                
                                                  • 还有一些数据库操作方法传入sql语句和参数即可(具体看代码)

                                                  实现具体的爬虫.py(即模板中的pictureSpider_demo.py文件)

                                                  • 继承scrapy.spiders.Spider 类
                                                  • 声明三个属性
                                                      name="webCrawler_scrapy"    #定义爬虫名,要和settings中的BOT_NAME属性对应的值一致
                                                  
                                                      allowed_domains=["desk.zol.com.cn"] #搜索的域名范围,也就是爬虫的约束区域,规定爬虫只爬取这个域名下的网页
                                                  
                                                      start_urls=["http://desk.zol.com.cn/fengjing/1920x1080/1.html"]   #开始爬取的地址
                                                    
                                                      • 实现parse方法,该函数名不能改变,因为Scrapy源码中默认callback函数的函数名就是parse
                                                          def parse(self, response):
                                                        
                                                          • 返回item
                                                              item=WebcrawlerScrapyItem()  #实例item(具体定义的item类),将要保存的值放到事先声明的item属性中
                                                              item['name']=file_name 
                                                              item['url']=realUrl
                                                              print item["name"],item["url"]    
                                                          
                                                              yield item  #返回item,这时会自定解析item
                                                            

                                                              测试

                                                              • 测试DBHelper
                                                                创建testdb数据库和testtable表

                                                                ![创建testdb数据库和testtable表][1]

                                                              • 测试爬虫
                                                                scrapy crawl webCrawler_scrapy运行爬虫后会将爬取得图片保存到本地,并且将name和url保存到数据库中

                                                              这里写图片描述

                                                              【SoloPi】SoloPi使用2-功能使用,录制回放 Soloπ是什么 Soloπ是一个无线化、非侵入式的Android自动化工具,公测版拥有录制回放、性能测试、一机多控三项主要功能,能为测试开发人员节省宝贵时间。 录制回放功能 Soloπ拥有录制操作的能力,用户只需要通过Soloπ执行用例步骤,Soloπ就能够将用户的操作记录下来,并且支持在各个设备上进行回放,这一切都能够在手机上独立完成。 ... 阅读详情

                                                              相关推荐

                                                              小红书高时效推荐系统背后的技术升级

                                                              在小红书 APP 中,推荐系统的实效性对推荐效果有着特别重要的影响,特别是作为 UGC 平台,小红书的推荐系统如果能更快地捕捉用户与笔记之间的变化和联系,就能够给推荐带来更好的效果。在2021年上半年,首页推荐的召回、粗排、精排的主要模块都保持在天级更新的状态,我们通过持续迭代,将召回 CF 渠道、召回索引更新、召回模型/粗精排模型的训练都做到了分钟级更新,为首页推荐的分发效率带来飞跃式提升,并给业务侧带来非常显著的收益。 小红书站内“最近一天内发布的新笔记”在首页的曝光占比一直很高,这段时间更是快速

                                                              REDtech_1024的博客 3523

                                                              scrapy爬虫框架将数据保存Mysql数据库中

                                                              scrapy爬虫框架简单Demogithub地址:https://github.com/lawlite19/PythonCrawler-Scrapy-Mysql-File-Template 使用scrapy爬虫框架将数据保存Mysql数据库和文件中settings.py 修改Mysql的配置信息 #Mysql数据库的配置信息 MYSQL_HOST = '127.0.0.1' MYSQL_DBNAM

                                                              莫失莫忘的博客 4万+

                                                              LCL滤波器参数设计实战:从理论约束到工程选型指南

                                                              本文提供了LCL滤波器参数设计的实战指南,从理论约束到工程选型逐步拆解。核心在于平衡总电感量、电感比与电容值,确保谐振频率落在安全区间,以满足并网电流谐波标准并维持系统稳定。文章以10kW并网逆变器为例,给出了具体的参数计算流程与选型步骤,并强调了寄生参数、阻尼设计等工程实现细节。

                                                              c6d7e8f9g的博客 922

                                                              Scrapy使用MySQL

                                                              供以后写代码参考: 一、同步执行 import pymysql class CollectDataPipeline(object): def open_spider(self, spider): print('open' * 20) self.conn = pymysql.connect(host="127.0.0.1", user="root",...

                                                              __tian__的博客 644

                                                              解决VM 与 Device/Credential Guard 不兼容。在禁用 Device/Credential Guard 后,可以运行 VM 的方法

                                                              在启用了Credential Guard或Device Guard的Windows 10主机上启动12.5版之前的VMware Workstation中的虚拟机时,将显示蓝色诊断屏幕(BSOD)。 会看到类似于以下内容的错误: VMware Workstation和Device / Credential Guard不兼容。禁用Device / Credential Guard后,可以运行VMwar...

                                                              Hern(宋兆恒) 39万+

                                                              基于Python的新闻聚合与推荐系统:抓取多新闻网站内容并根据用户兴趣进行个性化推荐

                                                              本文介绍了如何使用Python构建一个新闻聚合与推荐系统,涵盖了从新闻数据抓取、用户兴趣建模到推荐算法实现的全过程。通过爬虫技术抓取新闻网站内容,使用TF-IDF、Word2Vec等算法进行内容分析,并通过推荐算法向用户推送个性化的新闻,最终帮助用户快速获取自己感兴趣的信息。你可以根据具体需求,进一步扩展和优化系统。例如,加入更多的推荐算法、优化爬虫的抓取效率、增强前端展示的互动性等。通过本文的指导,您应该能够构建一个完整的新闻聚合与推荐系统,并为用户提供个性化的新闻推荐服务。

                                                              2201_76125261的博客 1514

                                                              Scrapy连接到MySQL

                                                              Scrapy连接到MySQL 修改pipelines.py文件加入如下代码 # 爬取到的数据写入到MySQL数据库 import pymysql class MySQLPipeline(object): # 打开数据库 def open_spider(self, spider): db = spider.settings.get('MYSQL_DB_NAME','...

                                                              Pascal Jiang博客 3894

                                                              Error response from daemon: Get “https://index.docker.io/v1/search?q=nginx&n=25“:

                                                              在使用docker seach 命令搜索镜像的时候遇到这个错误,docker pull是可以正常下载镜像的,关于这个问题,本文提供解决方案,完全可行。

                                                              猿小白的博客 1万+

                                                              python scrapy 配置mysql连接

                                                              在终端运行 爬取逻辑可参考 https://blog.youkuaiyun.com/weixin_43205308/article/details/130865542?spm=1001.2014.3001.5502

                                                              weixin_43205308的博客 757

                                                              YOLOv11涨点改进| TGRS 2026 | 独家创新首发、特征融合改进篇| 引入STSAM协同时空注意力融合模块,发论文热点创新,注意力能够互相引导强化边界和结构细节,增强目标检测、图像分割涨点

                                                              🔥本文提出了一种改进YOLOv11网络模型的STSAM协同时空注意力融合模块,用于提升高分辨率遥感变化检测的精度。STSAM通过并行处理全局跨时相注意力和局部坐标注意力,能有效聚焦真实变化目标,强化边界和结构细节。该模块包含两个分支:Cross-Attention分支通过时间嵌入增强双时相特征的时间差异,CoordAtt分支则强化局部结构细节。实验表明,STSAM能显著提升变化检测性能,同时保持训练稳定性。文章详细介绍了模块结构、原理、优势,并提供了完整的核心代码实现和配置方法,包括三种改进方案。

                                                              Ai缝合怪、助力小伙伴高效发论文 218

                                                              微信小程序 - 解决微信支付报错 requestPayment:fail no permission 原因分析及排查处理(支付失败出错,无法唤起支付弹框面板,微信支付API报错请求付款:失败无权限)

                                                              微信小程序,微信支付,支付报错,errMsg: "requestPayment:fail no permission",支付失败,支付权限没问题,微信小程序支付报错,检查了appid正确依旧不行,微信小程序支付异常,苹果ios手机,安卓手机,开发者工具模拟器,最新解决教程,小程序wx.requestPayment报错/无响应,小程序支付 requestPaym,微信小程序认证,真机运行,小程序微信支付提示错误,微信小程序里使用微信支付错误提示,微信小程序支付异常,微信支付弹框拉不起来,小程序支付api,都检

                                                              🏆 前端领域优质创作者 1万+

                                                              scrapy mysql pymysql_scrapy 使用pymysql操作数据库的两个问题。

                                                              已解决:1.乱码问题:Windows下向mysql写入数据前set names gbk;,关闭mysql后失效。2.只能写入最后一个item:去除删除表的代码。创建表的sql语句改为create table IF NOT EXISTS ysw()———————————————————————————————————————1. 将item写入数据库只能写进去最后一个item2. 写进去的汉字乱码p...

                                                              weixin_31684041的博客 378

                                                              LinePhone3.2.7(android端最新版本) sip客户端

                                                              SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

                                                              scrapy爬取数据保存到mysql数据库

                                                              之前一篇文章,写了scrapy入门博客。至于数据库建表也不再赘述。接下来介绍如何将数据进行mysql入库。 其实很简单,数据源都拿到了,入库就是信手拈来,着重介绍利用pymysql连接mysql数据库以及封装。 1.首先在settings里定义数据库连接属性: 地址:host、端口号:port、数据库名:dbname、用户名:user、密码:password 配置如下(根据自己的数据库...

                                                              进击的Coder菜鸟 2564

                                                              SIMATIC S7-1200, S7-1500 PID 控制[手册]

                                                              SIMATIC S7-1200, S7-1500 PID 控制[手册]

                                                              jdk-8u144-linux-x64.tar.gz.

                                                              该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

                                                              【Scrapy 数据库操作知识1】把Mysql的数据存入Excel,以及把Excel存入Mysql

                                                              第一个方法是直接在Mysql命令行输入:https://www.cnblogs.com/luwenjie110/p/4336988.html 第二个方法在pipeline文件中设置: 单纯的操作Excel文件: import pymysql # 使用twsited异步IO框架,实现数据的异步写入。 from pymysql import curso...

                                                              之度的博客 311

                                                              汉书HE8,好用的汇编代码编写工具

                                                              汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

                                                              scrapy mysql 不同的表,scrapy数据存储在mysql数据库的两种方式(同步和异步)

                                                              方法一:同步操作1.pipelines.py文件(处理数据的python文件)import pymysqlclass LvyouPipeline(object):def __init__(self):# connection databaseself.connect = pymysql.connect(host='XXX', user='root', passwd='XXX', db='scrap...

                                                              weixin_29215391的博客 398

                                                              scrapy 操作MYSQL

                                                              scrapy piplines操作mysql数据库: class EducationPipeline: def __init__(self): self.connect = pymysql.connect(host='localhost', port=3306, user='root',

                                                              网络爬虫开发 838

                                                              scrapy保存到mysql数据库

                                                              提取到数据后,编写pipeline.py文件,保存数据到mysql。 1、保存数据库有两种方法: 同步操作:数据量少的时候采用 异步操作:数据量大时采用,scrapy爬取的速度大于数据库插入的速度,当数据量大时就会出现堵塞,就需要采用异步保存。 这里多大的数据量才可定义为大?? 2、须知mysql知识点 数据库与表的创建,基本操作;      参考https://blog.csdn.ne...

                                                              loner_fang的博客 1万+

                                                              scrapy mysql django_Python Web编程,Django框架 -- (4) 模型 Model 操作数据库 MySQL

                                                              MySQL是Web应用中最常用的数据库, Django模型使用自带的ORM(对象关系映射 Object Relational Mapping)用于实现面向对象编程语言里不同类型系统的数据之间的转换。ORM在业务逻辑层和数据库层之间充当了桥梁的作用。ORM通过使用描述对象和数据库之间的映射的元数据,将程序中的对象自动持久化到数据库中。image.png每个模型都是一个Python的类,这些类继承dj...

                                                              weixin_33896830的博客 222

                                                              scrapy 安装数据库mysql错误汇总和操作步骤

                                                              操作步骤:   1、检查python是否支持mysql [root@bogon ~]# python Python 2.7.10 (default, Jun 5 2015, 17:56:24) [GCC 4.4.4 20100726 (Red Hat 4.4.4-13)] on linux2 Type "help", "copyright", "credits" or "license

                                                              kangqianglong的博客 2025

                                                              scrapy 异步存储mysql大量数据_scrapy数据存储在mysql数据库的两种方式(同步和异步)...

                                                              scrapy数据存储在mysql数据库的两种方式(同步和异步)发布时间:2020-10-19 14:38:24来源:脚本之家阅读:76作者:侠客云方法一:同步操作1.pipelines.py文件(处理数据的python文件)import pymysqlclass LvyouPipeline(object):def __init__(self):# connection databaseself.c...

                                                              weixin_39782433的博客 325

                                                              scrapy读取mysql中的url_scrapy通过连接池连接mysql工具(python3)

                                                              """数据库连接工具类#"""importpymysqlimporttracebackfrom DBUtils.PooledDB importPooledDBfrom scrapy.utils.project importget_project_settingsclassMysqlUtil(object):#获取setting文件中的配置settings =get_project_settings...

                                                              weixin_33108105的博客 392

                                                              Scrapy存入MySQL

                                                              一、概述 之前利用Scrapy爬取的数据,都是写入在json文件中,现在需要写入到mysql中。 在items.py中,主要有2个字段: class CityItem(scrapy.Item): name = scrapy.Field() url = scrapy.Field() 环境说明 mysql服务器ip:192.168.0.3 用户名:root 密码:abc...

                                                              shykevin的博客 881

                                                              scrapy mysql pipeline_Scrapy用Pipeline写入MySQL

                                                              # -*- coding: utf-8 -*-# Define your item pipelines here## Don't forget to add your pipeline to the ITEM_PIPELINES setting# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html# class Hong...

                                                              weixin_35688434的博客 188

                                                              利用Scrapy框架爬取数据,将数据储存到MySQL数据库中

                                                              ** 利用Scrapy框架爬取数据,将数据储存到MySQL数据库中 **使用Scrapy框架爬取数据,将其保存到mysql数据库的配置 class PymysqlPipeline(object): def init(self): #建立连接 self.conn=pymysql.connect(host=‘127.0.0.1’,user=‘root’,password=‘yh@123’,db=‘sp...

                                                              weixin_43835158的博客 966

                                                              Scrapy:数据库存储

                                                              使用scrapy爬虫保存数据到数据库

                                                              weixin_41897680的博客 647

                                                              scrapy存储到MySQL数据库

                                                              class MysqlPipeline(object): def __init__(self, host, database, user, password, port): self.host = host self.database = database self.user = user self.password = pa...

                                                              qq_42832858的博客 5369
                                                              上一篇: python创建目录(文件夹)
                                                              下一篇: 使用python对列表(list)去重
                                                              FanWinter
                                                              博客等级 码龄9年 24粉丝 21原创
                                                              评论
                                                              成就一亿技术人!
                                                              拼手气红包6.0元
                                                              还能输入1000个字符
                                                               
                                                               条评论被折叠 查看
                                                              添加红包

                                                              请填写红包祝福语或标题

                                                              个

                                                              红包个数最小为10个

                                                              元

                                                              红包金额最低5元

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

                                                              抵扣说明:

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

                                                              余额充值