添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

scrapy爬虫框架简单Demo

github地址: https://github.com/lawlite19/PythonCrawler-Scrapy-Mysql-File-Template
使用scrapy爬虫框架将数据保存Mysql数据库和文件中

settings.py

  • 修改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
  •     #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
  • 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配置文件中的信息
  • 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
  •     #连接到具体的数据库(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语句和参数即可(具体看代码)
  •     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
  •     item=WebcrawlerScrapyItem()  #实例item(具体定义的item类),将要保存的值放到事先声明的item属性中
        item['name']=file_name 
        item['url']=realUrl
        print item["name"],item["url"]    
        yield item  #返回item,这时会自定解析item
  • 测试DBHelper
    创建testdb数据库和testtable表

    scrapy crawl webCrawler_scrapy 运行爬虫后会将爬取得图片保存到本地,并且将name和url保存到数据库中
  • 写这篇文章的原因是因为牛人们总结的scrapy爬虫效果都很厉害的样子(http://www.bjhee.com/scrapy.html和https://segmentfault.com/a... 来自: 编程之蛙 作为一位对联盟游戏的爱好者,学习爬虫的时候也以这款游戏作为对象。这个项目使用的python版本:3.6.0,scrapy使用的版本:1.11。参照这篇博客即便是不会爬虫的小白也可以带你做出一个完整的s... 来自: AI吕小布 之前一篇文章,写了scrapy入门博客。至于数据库建表也不再赘述。接下来介绍如何将数据进行mysql入库。 其实很简单,数据源都拿到了,入库就是信手拈来,着重介绍利用pymysql连接mysql数... 来自: harry5508的博客 本章将讲述爬取IP地址,为后期深入爬虫做准备1.准备工作分析一下我们要抓取那些字段和网页的结构,我们要抓取的是ip地址,端口,服务器地址,速度,存活时间等查看一下网页的结构可以看到要抓取的内容主要在t... 来自: moon的博客 上篇博客使用scrapy框架爬取豆瓣电影top250信息将各种信息通过json存在文件中,不过对数据的进一步使用显然放在数据库中更加方便,这里将数据存入mysql数据库以便以后利用。 运行环境: 1... 来自: ljm_9615的博客 我定义好items后,下一步是要将items这个容器引入到我的spider里面。所以要在spider文件中写上这么一句话: from house.items import Test1It... 来自: memoryjdch的博客 python3使用scrapy获取数据然后保存至MySQL数据库,我上一篇写了如何爬取数据保存为csv文件,这一篇将会写如何将数据保存至数据库。 思路大都一样,我列一个思路: 1:获取腾讯招聘网。... 来自: 昆兰.沃斯 的博客 1.cmd 命令行 pip install pymysql,pip install lxml,pip install requests  2.创建scrapy项目并进行MySQ... 来自: SunChao3555的博客 前面小试了一下scrapy抓取博客园的博客(您可在此查看scrapy爬虫成长日记之创建工程-抽取数据-保存为json格式的数据),但是前面抓取的数据时保存为json格式的文本文件中的。这很显然不满足我... 来自: 纸上得来终觉浅 最近重新了系统,导致原先的scrapy不能用,出现了各种问题: Python: Windows下pip安装库出错:Microsoft Visual C++ 9.0 is required... 来自: chang___hong的专栏 为了学习机器学习深度学习和文本挖掘方面的知识,需要获取一定的数据,新浪微博的大量数据可以作为此次研究历程的对象 一、环境准备python 2.7  scrapy框架的部署(可以查看上一篇博客的简要操作... 来自: Fitz的博客 有很多数据库符合Python Database API规范2.0,例如MySQL,PostgreSQL,Orcale,Microsoft SQL Server和SQLite。它们的驱动是很复杂的并且经... 爬取的网页是 http://www.poi86.com/poi/amap/district/331002/1.html 验证的元素是圈出来的。 用谷歌浏览器自带的工具copyxpath的 respon 比如,抓取淘宝商家信息存到商家信息表中,淘宝宝贝再存入宝贝表中?如何实现啊啊啊啊啊!!!!? 还有scrapy怎么破解图片验证码/? 现在已知可以用云打码平台来实现,可是云打码识别出图片中的验证码知乎... 来自: xiaomoxian567的博客 抓取目标网址:https://www.cn357.com/notice_300;https://www.cn357.com/notice_191 由于该网站没有设置反爬,所以直接干! 需要抓取的数... 来自: xiaosongshupy的博客 这里的爬虫代码是基于第一个爬虫程序【重写第一个爬虫程序】,由于是python3.6.4,所以不能使用mysqldb,那就采用pymysql。 一、安装并测试pymysql pip install py... 来自: Martian 在论坛上看过很多的scrapy数据入库(mysql)的例子,但是我尝试之后总是出现一些莫名其妙的错误,搞得自己走了很多弯路,于是我将我认为是最简单易懂的方法和代码展示给大家,欢迎大家吐槽1.创建scr... 来自: CosCXY的博客 今天我们利用scrapy框架爬取数据,然后将数据储存到MySQL中,话不多说,今天我们爬取的网页是:http://www.ygdy8.com,我们要获取经典电影分类中的国内电影,日韩电影,欧美电影三个... 来自: 十一月的萧邦 爬虫Scrapy 数据库的配置mysql(pymysql) #进入pipelines.py文件#首先导入pymysql  import pymysql class SqkPipeline(object... 来自: xuanyugang的博客 1、使用pip install scrapy 安装scrapy2、打开cmd命令行窗口,创建属于自己的爬虫项目工程。命令:scrapy startproject First3、通过步骤2爬虫工程已经创... 来自: Cludy Sky的博客 首先本文是基于win7操作系统,并且配置好scrapy的运行环境,采用Python语言编写的(前面有疑问的请先Google,百度   ,拒绝伸手党) 1.假设你已经配置好scrapy的运行环境,这里... 来自: 我也想当个菜鸡 单纯使用request库进行爬虫,将数据存入MySQL的方法如下第一步:从Navicat进入创建数据库(articles),数据表(info)第二步:定义函数import pymysqldef sav... 来自: 西门大盗的博客 python3简单爬虫并存入mysql数据库 网络爬虫是一种高效的信息采集器,利用它可以快速、准确地采集我们想要的各种的数据资源。因此,可以说,网络爬虫技术几乎已成为大数据时代IT从业时代的必修课程... 来自: Air_RA的博客 python2.7,把爬下来的数据写入了mysql建立的一个表中,大概有几万条数据 现在想再写一个GUI界面,能够把数据库表中的数据,通过各种条件查询出来,供用户查看结果 把GUI查询界面完成后,如何 最近在研究Scrapy,写了一个爬虫,爬去链家数据。但在将爬去的数据保存到数据库的时候发生数据丢失,为此我用了两种方式保存爬去的数据:1.写文本文件。 2 : 保存到SQLSERVER数据库,运行完之 大家好,这是我的第一篇博客,写的不好请见谅。小编是个多年的NBA观众,最近正值季后赛的比赛,闲来无事,突发奇想,想利用刚刚所学的python著名爬虫框架scrapy采集一下全NBA的球员基本信息。... 来自: qq_41532599的博客 根据上一篇文章我们已经成功的爬取到了租房网站房屋信息,接下来就是着手将数据存入数据库了,这里,我们采用MySQL数据库 编写数据库工具类 SQLAlchemy是一款适用于Python的非常好用的O... 来自: 星星之火,可以燎原 首先安装mysqlclient包,推荐使用豆瓣源安装,速度不仅快,还不容易出错。 pip install -i https://pypi.douban.com/simple/ mysqlclie... 来自: Fitz的博客 数据库的异步写入 scrapy爬虫框架里数据库的异步写入与同步写入在代码上的区别也就在pipelines.py文件和settings.py问价的区别,其他的都是一样的。本文就介绍一下pipeli... 来自: zhouls007的博客 还记得去年在北京安博会上,看到一些厂家的展示台上,各种船舶、公路、车辆的高清视频直播,好奇这些数据是怎么接到现场的,现场成百上千家展台,不可能有那么大的带宽供应,细想数据肯定不是实时的,果然,盯着看了... 来自: Babosa的专栏 开发ArcGIS Online应用程序模板之前,需要了解怎么使用ArcGIS API for JavaScript。     在ArcGIS Online当中如何构架自己的应用程序模板,我们得先要了... 来自: ArcGIS产品与技术专栏 下载安装JDK并配置环境变量 这里我下载安装的是jdk-7u51-windows-i586,如果你没有请到Oracle官网下载; 【我的电脑】-【高级系统设置】-【环境变量】-系统变量中的Path添加... 来自: hankaibo 在处理数据过程中,常会遇到将一条数据拆分成多条,比如一个人的地址信息中,可能有多条地址,既有家庭地址也有工作地址,还有电话信息等等类似的情况,实际使用数据的时候又需要分开处理,这个时候就需要将这一条数... 来自: dongcheng 的博客 对于J2EE项目导入导出Excel是最普通和实用功能,本工具类使用步骤简单,功能强大,只需要对实体类进行简单的注解就能实现导入导出功能,导入导出操作的都是实体对象. 请看一下这个类都有哪些功能: 来自: 李坤 大米时代 第五期 因为公司有个项目有webapp的需求,在前期准备的期间考虑过使用ionic,毕竟该项目web端的框架使用的是Angular,项目组的人也都比较熟悉,但是我们毕竟只是做个移动的网页,不想用ionic那么... 来自: zhangl的博客 1、问题症状描述       最近在处理一个新需求问题,代码的大致逻辑是获取一个实体对象,调用该对象的set方法设置其中的某些字段,然后把修改后的实体作为参数供其他地方调用,根据返回值来决定是否更新这... 来自: Mr_Alex Java中的ThreadLocal类允许我们创建只能被同一个线程读写的变量。因此,如果一段代码含有一个ThreadLocal变量的引用,即使两个线程同时执行这段代码,它们也无法访问到对方的Thread... 来自: u011860731的专栏 本篇文章是根据我的上篇博客,给出的改进版,由于时间有限,仅做了一个简单的优化。相关文章:将excel导入数据库2018年4月1日,新增下载地址链接:点击打开源码下载地址十分抱歉,这个链接地址没有在这篇... 来自: Lynn_Blog 以前使用qq邮箱、163服务器发送邮件,帐号直接使用密码,现在不行了,得使用授权码,简单记录下 1、首先开通POP3/SMTP服务,qq邮箱——帐号——设置,找到POP3/SMTP点开启,输入短信会有... 来自: 爱代码也爱生活 目前在Android开发中,开源的网络请求框架有Android-async-http  ,Volley,Okhttp等,这几种框架都是市面上主流的,每种都有各自的优点。今天主要来看看Okhttp。之前... 来自: zhangxiaowei nginx是个好东西,Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambl... 来自: maoyuanming0806的博客 问题场景描述整个项目通过Maven构建,大致结构如下: 核心Spring框架一个module spring-boot-base service和dao一个module server-core 提供系统... 来自: 开发随笔 最近一直在准备面试,为了使自己的Java水平更上一个档次,拜读了李林峰老师的《Netty权威指南》,了解了Java关于IO的发展和最新的技术,真是受益匪浅,现在把我总结的关于BIO、NIO和AIO的区... 来自: 我的编程世界 如下图所示,蜂窝小区,以1为中心,顺时针编号,编号最大限定为100000。求任意两编号之间的最短距离。两个相邻小区的距离为1 示例:19到30的最短距离为5 实现如下三个接口: /**********... 来自: NYS001的专栏 错误类型及描述: expdp 导出表在表分析是开始出现报错。 ORA-39127: unexpected error from call to export_string :=SYS.DBMS_A... [Python]使用Scrapy爬... weixin_40662312: IOError: [Errno socket error] [Errno 11001] getaddrinfo failed

    机器学习(三):逻辑回归应用_手写... qq_37469432: 请问displa_array 那行的定义为什么那么写呢