一、Scrapy框架介绍

'''Scrapy是适用于Python的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测以及自动化'''。

太繁琐了,很难理解吧。一句话概述。Scrapy是一个开源的框架,相当于已经给你配置好了py文件,你主要负责告诉它抓什么,保存到哪里就行,一张图定义scrapy

这个就是scrapy的介绍。

二、项目前安装

1、scrapy的安装。

这里的所有安装都一样,只要你的pip没损坏,那么pip install xxxx(scrapy)就可以,如果损坏了的话你需要写成这个格式python -m pip install -i  模块名 https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip 就可以了

2、pymysql的安装同上。

3、mysql.connector安装同上。

当然,这里的所有步骤是基于你有mysql,本机安装了mysql 的情况下,否则你怎么可能存储到人家里面呢,是吧。这里作者就不一一给大家找mysql的安装网站了,直接百度mysql就能找到官网了,另外说下,当你的mysql完全配备好了之后,你还要添加环境变量.环境变量配置好了之后如果你的sql是8.0级以上的你还需要这个操作。因为这些都是和我们后续的设置有很大关系的

三、案例执行

1、项目的创建

这次我们创建项目的方式与平常有很大的不同,于终端进行。如下

(打开pycharm,创建一个目录,点击下面的终端,随后进入到刚刚创建的目录下面cd xxx)进入后输入scrapy startproject (这里和上面的文件名可以不一样)xxx   (Eg:scrapy startproject lieyun)

这里我们可以看到,他已经跟我们说步骤了,那就走着

这里就已经创建好LYscrapy这个项目了,里面会生成很多打包的文件,足够我们使用

这里可以看到,生成了很多py文件,后续都会用到。scrapy genspider -t crawl 新文件名 域名(爬取的域名,www.后面的那一串) 。这里的genspider -t说的是指定运行文件格式 是crawl

2、案例部署设置

到这里我们的文件基本就已经创建完成,创建完成后第一步,进入到我们的最后一步创建的文件当中,在引擎spider里面。创建好文件之后里面会包含(spider文件夹,里面有你最后一步床的文件。itmes(用于传递给存储间用的,这里可以理解为定义表格字段(实例化爬取的字段))。pipeline(这个是用来存储用的,可以存储于表格,数据库等,可以理解为车站,有高铁,有火车,有班车),setting(这个是用于爬虫的时候需要设置的参数,一般就是UA和ip代理池而已))这里我们需要进入setting里设置,如下图

1、在最后一行添加数据库驱动

2、打开存储管理,利于我们存储到数据库当中

3、遵循robot(爬取)规则   这里我们当然不能遵循,否则我们什么都爬不出来

4、UA的设置,这里作者并没有取消注释经行设置,因为猎云网反能力不强,所以可以不添加

5、启动驱动的创建。将文件夹收起,那一大串消失后在这级创建一个启动的代码

名字自定义,代码为

from scrapy import cmdline
##注意,这里的lyw是作者在创建文件的时候最后一步的那个文件名,也就是spider中的py文件名
cmdline.execute('scrapy crawl lyw'.split(' '))

三、项目开启

这里由于代码量太多,作者就不一一解释,重要的解释都在代码块当中。

1、引擎间的描述:

spider的py文件中的代码。这个是引擎间

import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
#..item的意思是从他的上一级查找item并导入itme的LieyunItem模块
from ..items import LieyunItemclass LywSpider(CrawlSpider):#这是我们的引擎文件名name = 'lyw'##这是我们的网站域名allowed_domains = ['lieyunwang.cn']##这里需要填写你怕爬取的第一个网站的全部url,作为起点start_urls = ['https://m.lieyunwang.cn/latest/p1.html']rules = (##这个是url,第一个是用于查找下一章节的url的,用正则表达式的方法选取我们下一张要爬取的的urlRule(LinkExtractor(allow=r'/latest/p\d+.html'), follow=True),##这个是每一篇文章的url,用正则方式选取,为了能够进入该网页爬取数据Rule(LinkExtractor(allow=r'/archives/\d+'),callback='parse_item', follow=True))def parse_item(self, response):'标题'title=response.xpath("//h1[@class='archives-title']/text()").getall()title="".join(title).strip()'发布公司'company=response.xpath("//div[@class='tag']/span/text()").getall()company = "".join(company).strip()'今日爆言'tell=response.xpath("//div[@class='archives-digest']/text()").get()'作者'scoure=response.xpath("//div[@class='main-text']/p/strong/text()").get()'内容'content=response.xpath("//div[@class='main-text']/p/text()").getall()content="".join(content).strip()'发布时间'a_time=response.xpath("//div[@class='time pull-right']/text()").get()a_time="".join(a_time).strip()article_url=response.url##创建猎运item对象,将输入传入item=LieyunItem()#兄弟们可以理解为键值对的的赋值item['title']=titleitem['a_time']=a_timeitem['company']=companyitem['tell']=tellitem['scoure']=scoureitem['content']=contentitem['article_url']=article_url##解析完成后,将推送到pipelineyield item

2、itme激活器的描述

# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.htmlimport scrapyclass LieyunItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()##接受从lyw中传入的数据,实例化,并经行下一步传输,作用可以理解为激活,然后传给pipelinestitle=scrapy.Field()a_time=scrapy.Field()company=scrapy.Field()tell=scrapy.Field()scoure=scrapy.Field()content=scrapy.Field()article_url=scrapy.Field()

3、mysql创建表格

遵循数据库原则,每张表必须要有主键,因此会多出来一个id字段,这里大家设置的时候需要带上自增约束,后续我们没有id这个数据,如果不加自增约束,将会报错为空(这里作者就不一一慢慢创,大家可以根据自己想要的数据创建相关字段)

4、下载器的描述设置(这个是重点)

# 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# useful for handling different item types with a single interface
from itemadapter import ItemAdapter
import pymysql
from twisted.enterprise import adbapi
class LieyunPipeline(object):def __init__(self,mysql_config):##这里的方法和之前我们的setting中的内容很象,主要是用来参数的连接,并实例化self.dbpool=adbapi.ConnectionPool(mysql_config['DRIVER'],host=mysql_config['HOST'],user=mysql_config['USER'],password=mysql_config['PASSWORD'],database=mysql_config['DATABASE'],auth_plugin=mysql_config['auth_plugin'],charset='utf8')@classmethoddef from_crawler(cls,crawler):#编写类方法,这是核心,主要是调用setting配置的mysql,用于连接sql数据库mysql_config=crawler.settings['MYSQL_DB_CONFIG']return cls(mysql_config)def process_item(self, item, spider):##这里的方法是用来执行sql语句传输数据result=self.dbpool.runInteraction(self.insert_into,item)##这里是用来如果报错,则交给insert_erro处理,解释原因result.addErrback(self.insert_erro)return item##执行sql语句插入方法def insert_into(self,cursor,item):##编写mysql插入语句,注意,这里的id为null,代表不填入,倘若你之前创建的时候没勾选自增,那么需要到mysql中去改一下sql='insert into lieyunw (id,title,a_time,company,tell,scoure,content,article_url) values (null ,%s,%s,%s,%s,%s,%s,%s)'args=(item['title'],item['a_time'],item['company'],item['tell'],item['scoure'],item['content'], item['article_url'])cursor.execute(sql,args)##添加这一方法是为了我们能够得知如果报错是什么错误def insert_erro(self,failure):print('========================================')print(failure)print('============================================================')

四、成果展示

到此为之项目基本结束,这就是 我们对应的每篇章节,每个新闻的内容的保存

五、报错指南

相信大家都不会一番风顺的完成这个案例,不过我依旧希望最好能够一次性完成,以下是作者总结的报错

1、 'mysql.connector.errors.NotSupportedError'>: Authentication plugin 'caching_sha2_password' is not supported。(没下载mysql.connector,需要pip一下)

2、'mysql.connector.errors.InterityError '>1048(23000):column 'id' cannot be null(这一类错误是属于mysql内的错误,也就是说你上传数据库的时候,你的id是主键约束不能为空的,但是您在上传的时候选择了null,这时候你可以去mysql中重新修改下id字段,将自增约束勾选上)

3、“由于链接方在一段时间内没有正确的答复或连接反应,连接尝试失败”(

反爬,或者网络状态不加,要么加请求头UA,要么ip代理池 )

六、今日美文:

这是今天一位老师送给我的话,感受良多:技术建立在基础上你要一步一步打牢基础,而不是为了追求速度去学习。基础牢固后你的问题也会越来越少。如果有一天及发现你在学习这方面进展不行了,不妨提升下自己的技术。

听到这句话瞬间我并不明白到底是什么意思,难道学习不就是在提升技术吗。过后才了解其意,到底是为了get什么

python框架之Scrapy自动存储mysql数据库相关推荐

  1. python爬取电影网站存储于数据库_python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析...

    字符串常用方法 # 去掉左右空格 'hello world'.strip() # 'hello world' # 按指定字符切割 'hello world'.split(' ') # ['hello' ...

  2. Elasticsearch安装及自动同步mysql数据库数据

    2019独角兽企业重金招聘Python工程师标准>>> Elasticsearch安装及自动同步mysql数据库数据 1           环境: CentOS  6.4  x64 ...

  3. linux备份mysql怎样操作,Linux下自动备份MySQL数据库详细操作步骤(转载)

    环境说明 操作系统:CentOS IP:192.168.150.214 Oracle数据库版本:Oracle11gR2 用户:root 密码:123456 端口:3306 数据库:ts_0.ts_1. ...

  4. Python爬取豆瓣音乐存储MongoDB数据库(Python爬虫实战1)

    Python爬取豆瓣音乐存储MongoDB数据库(Python爬虫实战1) 1.  爬虫设计的技术 1)数据获取,通过http获取网站的数据,如urllib,urllib2,requests等模块: ...

  5. mysql 多久备份一次_教你如何通过一次单击自动备份mysql数据库

    备份mysql一直是很多朋友的头疼,特别是根据时间段备份,今天我将教你如何每天备份一个mysql数据库文件. 1 首先创建一个批处理文件,将以下代码保存为.bat文件,文件名最好是英文.注意以下路径, ...

  6. Linux自动备份MySQL数据库脚本代码

    Linux自动备份MySQL数据库脚本代码 下面这段Linux的Shell脚本用于每日自动备份MySQL数据库,可通过Linux的crontab每天定时执行 在脚本中可设置需要备份的数据库表清单,并且 ...

  7. centos mysql自动备份_CentOS下每天自动备份mysql数据库

    每天自动备份mysql数据库的脚本,并且自动发送到你指定的邮箱面,这样vpser再也不会为丢失数据烦恼啦. mysqldump -uuser -ppassword –databases db1 db2 ...

  8. win2003下如何自动备份MySQL数据库

    http://www.cnblogs.com/lxJack/archive/2011/05/22/2053270.html 有网友问我在win2003下如何自动备份MySQL数据库,既然是自动备份,那 ...

  9. mysql 自动备份发送,Centos定时自动备份MySQL数据库并发送至指定邮箱

    在Centos中使用Cron定时自动备份mysql数据库并通过Mutt发送到指定Gmail邮箱,利用Gmail垃圾邮件策略实现定时删除 { No.1 编写Shell 文件 } // Path /roo ...

最新文章

  1. 数学_方向导数和梯度
  2. Windows Phone开发基础(11)实现一个RSS阅读器
  3. P1078 文化之旅[最短路]
  4. Oracle存储过程procedure in、out、in out 模式参数【不发布,纯转】
  5. Jeewx 捷微管家操作配置文档(开源版本)
  6. rust笔记3 referenceborrow
  7. dockerfile实例
  8. c语言数码管共阳极动态显示,编程实现共阳极八个数码管依次显示12345678
  9. Unity中使用VideoPlayer控制播放暂停进度条
  10. Servlet3异步原理
  11. 存储数据使用数据库而不用EXCEL
  12. 无数本高清古籍善本下载,200多个G
  13. paypal如何支付欧元_paypal海外支付流程是什么?paypal中国可以用吗?
  14. Astronauts UVALive - 3713(2-SAT)
  15. 程序员常用单词词汇汇总
  16. PKU2506Tiling
  17. 改变全局变量值得两种方法
  18. 配置CiscoWorks 2000 ANI同步
  19. 三分钟轻松实现连接西门子PLC
  20. mysql单表1000万条_mysql单表千万条数据测试

热门文章

  1. 51单片机控制DHT11温湿度传感器,并使用OLED屏幕显示
  2. 安卓内存使用情况监控,剖析Android开发未来的出路在哪里,薪资翻倍
  3. 如何计算石英晶振的匹配电容
  4. Jenkins_Docker
  5. dodo:人脸识别方法个人见解(zz from prfans)
  6. 原型图到成品:步步深入 CSS 布局
  7. 如何解决 Iterative 半监督训练 在 ASR 训练中难以落地的问题丨RTC Dev Meetup
  8. ”去他丫的北上广,老子要去成都定居了,Android-Binder机制及AIDL使用
  9. Unity开发之-Unity入门简介(近万字攻略)
  10. 陈皓谈对待技术的态度