一.scrapy简介

   Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍。所谓的框架就是一个已经被集成了各种功能(高性能异步下载,队列,分布式,解析,持久化等)的具有很强通用性的项目模板。对于框架的学习,重点是要学习其框架的特性、各个功能的用法即可。  五大核心组件工作流程:

  • 引擎(Scrapy)
    用来处理整个系统的数据流处理, 触发事务(框架核心)
  • 调度器(Scheduler)
    用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址
  • 下载器(Downloader)
    用于下载网页内容, 并将网页内容返回给蜘蛛(Scrapy下载器是建立在twisted这个高效的异步模型上的)
  • 爬虫(Spiders)
    爬虫是主要干活的, 用于从特定的网页中提取自己需要的信息, 即所谓的实体(Item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面
  • 项目管道(Pipeline)
    负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。当页面被爬虫解析后,将被发送到项目管道,并经过几个特定的次序处理数据。

二.安装

  Linux:pip3 install scrapyWindows:a. pip3 install wheelb. 下载twisted http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
c. 进入下载目录,执行 pip3 install Twisted‑17.1.0‑cp35‑cp35m‑win_amd64.whld. pip3 install pywin32e. pip3 install scrapy其实:应该还要装一个lxml,这之前在使用xpath的时候已经装了

三.基础使用

  1.创建项目

1.在命令行中使用命令进入即将创建爬虫项目的文件夹

2.在命令行执行 scrapy starproject 爬虫项目名称(就会在当前文件夹创建项目名称的文件夹) ---->创建项目

3.在命令行执行 cd 项目名称文件夹

4.在命令行执行 scrapy genspider 爬虫文件名称 www.xxx.com  -----创建爬虫文件(存放在spider文件夹)  执行完毕后,会在项目的spiders中生成一个应用名的py爬虫文件

5.

  5.

注:各个文件描述:  scrapy.cfg 项目的主配置信息。(真正爬虫相关的配置信息在settings.py文件中)   items.py 设置数据存储模板,用于结构化数据,如:Django的Model pipelines 数据持久化处理   settings.py 配置文件,如:递归的层数、并发数,延迟下载等   spiders 爬虫目录,如:创建文件,编写爬虫解析规则  scrapy.cfg 项目的主配置信息。(真正爬虫相关的配置信息在settings.py文件中)   items.py 设置数据存储模板,用于结构化数据,如:Django的Model pipelines 数据持久化处理   settings.py 配置文件,如:递归的层数、并发数,延迟下载等 spiders 爬虫目录,如:创建文件,编写爬虫解析规则

    2.查看一下爬虫文件的内容

import scrapyclass QiubaiSpider(scrapy.Spider):name = 'qiubai' #应用名称#允许爬取的域名(如果遇到非该域名的url则爬取不到数据)allowed_domains = ['https://www.qiushibaike.com/']#起始爬取的urlstart_urls = ['https://www.qiushibaike.com/']#访问起始URL并获取结果后的回调函数,该函数的response参数就是向起始的url发送请求后,获取的响应对象.该函数返回值必须为可迭代对象或者NUll def parse(self, response):print(response.text) #获取字符串类型的响应内容print(response.body)#获取字节类型的相应内容

  3.修改配置

在stttings文件中:修改配置:  1.修改robots协议,表示我们不准从robots协议    ROBOTSTXT_OBEY = False

  2.UA伪装    默认是这样的:USER_AGENT = 'firstblood (+http://www.yourdomain.com)'    修改:USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)           Chrome/63.0.3239.26 Safari/537.36 Core/1.63.6821.400 QQBrowser/10.3.3040.400'

  4.执行爬虫程序

1.在命令行进入所在项目文件夹

2. 执行scrapy crawl 爬虫文件名称 --nolog  (表示不打印日志)

  5.本地持久化存储

# -*- coding: utf-8 -*-
import scrapyclass QiubaiSpider(scrapy.Spider):name = 'qiubai'# allowed_domains = ['www.xxx.com']start_urls = ['https://www.qiushibaike.com/text/']def parse(self, response):all_data = []div_list=response.xpath('//div[@id="content-left"]/div')for div in  div_list:# author=div.xpath('./div[1]/a[2]/h2/text()')[0].extract()#这边xpath解析出来的是一个select对象,我们要从select对象拿出数据data#必须执行extract,extract_first这种方法你必须保证,select对象只有一个数据author=div.xpath('./div[1]/a[2]/h2/text()').extract_first()#extract(),这个方法是取出select对象的所有datacontent=div.xpath('./a[1]/div/span//text()').extract()content=''.join(content)dic={'author':author,'content':content}all_data.append(dic)# 1.基于终端命令的持久化存储,不支持txt,支持csv,jsason等等#返回给终端执行命令进行终端本地持久化存储return all_data

执行命令:scrapy crawl qiubai -o qiushibaike.csv

scrapy框架的我们常用的xpath并不是同一个,有点差别,器解析出来的是select对象,数据存放在select对象的data当中

支持的本地存储格式

  6.管道本地持久化储存

#还有大前提就是要使用管道持久化存储,必须去settings.py把这边的注释给放开
#要通过中间件持久化存储必须放开这个注释,字典后面的数字表示优先级#数字越小优先级越高ITEM_PIPELINES = {   'QiuBaiPRO.pipelines.QiubaiproPipeline': 300,}
#爬虫文件# -*- coding: utf-8 -*-
import scrapy
from QiuBaiPRO.items import QiubaiproItemclass QiubaiSpider(scrapy.Spider):name = 'qiubai'# allowed_domains = ['www.xxx.com']start_urls = ['https://www.qiushibaike.com/text/']# 2.基于管道的持久化存储(基于管道的持久化存储必须写下管道文件当中)def parse(self,response):div_list=response.xpath('//div[@id="content-left"]/div')for div in  div_list:author=div.xpath('./div[1]/a[2]/h2/text()')[0].extract()content=div.xpath('./a[1]/div/span//text()').extract()content=''.join(content)#实例话一个item对象(容器)item=QiubaiproItem()item['author']=authoritem['content']=content#返回给pipline去持久化存储yield item#items.py
import scrapyclass QiubaiproItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field() 创建容器author=scrapy.Field()content=scrapy.Field()

#piplines.py
# -*- coding: utf-8 -*-# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html
from scrapy.exceptions import DropItem
class QiubaiproPipeline(object): f=None # 开启爬虫时执行程序执行一次,重写父类的方法,可以开启数据库等,要记得参数有一个spider不要忘记了 def open_spider(self,spider): self.f=open('./qiushibaike.txt','w',encoding='utf-8') #提取处理数据(保存数据) def process_item(self, item, spider): self.f.write(item['author']+':'+item['content']+'\n')     #raise DropItem() # 后续的 pipeline的process_item方法不再执行     return item  #要记得把数据返回给下一个存储的,要不然下一个存储的就拿不到数据了     #.关闭爬虫时执行也是只执行一次,重写父类方法,可以关闭数据库等,重写父类要要有参数spider,不要忘记了def colse_spider(self,spider):self.f .close()

     7.管道mysql储存

#还有大前提就是要使用管道持久化存储,必须去settings.py把这边的注释给放开
#要通过中间件持久化存储必须放开这个注释,字典后面的数字表示优先级#数字越小优先级越高ITEM_PIPELINES = {   'QiuBaiPRO.pipelines.QiubaiproPipeline': 300,}

爬虫文件:# -*- coding: utf-8 -*-
import scrapy
from QiuBaiPRO.items import QiubaiproItemclass QiubaiSpider(scrapy.Spider):name = 'qiubai'# allowed_domains = ['www.xxx.com']start_urls = ['https://www.qiushibaike.com/text/']# 2.基于管道的持久化存储(基于管道的持久化存储必须写下管道文件当中)def parse(self,response):div_list=response.xpath('//div[@id="content-left"]/div')for div in  div_list:try :author = div.xpath('./div[1]/a[2]/h2/text()')[0].extract()except Exception as e:print(e)continuecontent = div.xpath('./a[1]/div/span//text()').extract()content = ''.join(content)# 实例话一个item对象(容器)item = QiubaiproItem()item['author'] = authoritem['content'] = content# 返回给pipline去持久化存储yield item#pipline.py
class Mysql_PipeLine(object):conn=Nonecursor=Nonedef open_spider(self,spider):self.conn=pymysql.connect(host='127.0.0.1',port=3306,user='root',password='123',db='qiubai')def process_item(self, item, spider):self.cursor=self.conn.cursor()print(item['author'])try:self.cursor.execute('insert into qiubai values ("%s","%s")'% (item['author'],item['content']))self.conn.commit()except Exception as  e:# print(e)
       return item  #要记得把数据返回  def close_spider(self,spider):      self.cursor.close()      self.conn.close()
 

  8.redis同理

class Redis_PipeLine(object):conn=Nonedef open_spider(self,spider):#m没有设置密码就先不设置了self.conn=Redis(host='127.0.0.1',port=6379,)def process_item(self,item,spider):dic={'author':item['author],'content':item['content']}self.conn.lpush('qiubai',dic)    return item #要记得把数据返回#不要关闭,局部用重写方法,也不需要提交

#redis如果使用不了要指定redis的版本pip install -U redis==2.10.6

  9.scrapy中一些常用的属性

我们所有自己写的爬虫都是继承与spider.Spider这个类name定义爬虫名字,我们通过命令启动的时候用的就是这个名字,这个名字必须是唯一的allowed_domains包含了spider允许爬取的域名列表。当offsiteMiddleware启用时,域名不在列表中URL不会被访问
所以在爬虫文件中,每次生成Request请求时都会进行和这里的域名进行判断start_urls起始的url列表
这里会通过spider.Spider方法中会调用start_request循环请求这个列表中每个地址。custom_settings自定义配置,可以覆盖settings的配置,主要用于当我们对爬虫有特定需求设置的时候设置的是以字典的方式设置:custom_settings = {}from_crawler这是一个类方法,我们定义这样一个类方法,可以通过crawler.settings.get()这种方式获取settings配置文件中的信息,同时这个也可以在pipeline中使用start_requests()
这个方法必须返回一个可迭代对象,该对象包含了spider用于爬取的第一个Request请求
这个方法是在被继承的父类中spider.Spider中写的,默认是通过get请求,如果我们需要修改最开始的这个请求,可以重写这个方法,如我们想通过post请求make_requests_from_url(url)
这个也是在父类中start_requests调用的,当然这个方法我们也可以重写parse(response)
这个其实默认的回调函数
负责处理response并返回处理的数据以及跟进的url
该方法以及其他的Request回调函数必须返回一个包含Request或Item的可迭代对象

转载于:https://www.cnblogs.com/tjp40922/p/10458040.html

scrapy框架初识相关推荐

  1. scrapy框架初识1

    目录 scrapy框架介绍: scrapy框架的基本使用: scrapy数据解析操作: ​scrapy持久化存储: 将爬取到的数据一份存储到本地一份存储到数据库,如何实现? scrapy框架介绍: 框 ...

  2. day26-爬虫-scrapy框架初识

    1.框架了解:高性能的异步下载.解析.持久化存储 2.下载安装,创建项目----------- pip install wheel Twisted 5步安装! 二.安装Linux:pip3 insta ...

  3. scrapy框架初识02

    目录 基于Spider的全站数据抓取 五大核心组件: 请求传参 图片数据爬取之ImagesPipeline: 基于Spider的全站数据抓取 - 就是将网站中某板块下的全部页码对应的页面数据进行抓取 ...

  4. 初识 scrapy 框架 - 安装

    前面豆子学习了基本的urllib的模块,通过这个模块可以写一些简单的爬虫文件.如果要处理大中型的爬虫项目,urllib就显得比较low了,这个时候可以使用scrapy框架来实现,很多基本的处理在scr ...

  5. Python爬虫之Scrapy框架系列(1)——初识Scrapy框架【安装+简介+运行流程+组件介绍】

    目录: 1.Scrapy模块安装 2.Scrapy框架简介 2.1 Scrapy是个啥? 2.2 我们为啥要用这玩意呢? 3.运行流程 3.1 引入: 3.2 进入正题: 3.3 数据流: 3.4 中 ...

  6. Python scrapy框架(01):scrapy介绍 初识scrapy

    前言: 最近在整理资料,顺便把部分干货写出来供学习以交流 一.scrapy的介绍 (1)何为框架?如何学习框架 框架就是一个集成了很多功能的一个通用性比较高的模板: 学习框架就学习框架中封装好的各种功 ...

  7. 解析python网络爬虫pdf 黑马程序员_正版 解析Python网络爬虫 核心技术 Scrapy框架 分布式爬虫 黑马程序员 Python应用编程丛书 中国铁道出版社...

    商品参数 书名:Python应用编程丛书:解析Python网络爬虫:核心技术.Scrapy框架.分布式爬虫 定价:52.00元 作者:[中国]黑马程序员 出版社:中国铁道出版社 出版日期:2018-0 ...

  8. Scrapy框架知识手册 - 从零到一

    Scrapy框架知识手册 - 从零到一 一.初识Scrapy 1.Scrapy简介 2.网络爬虫原理 3.网络爬虫的基本流程 二.Scrapy安装与创建 1.安装 2.查看命令 3.主要命令 三.Sc ...

  9. python scrapy框架爬虫_Python Scrapy爬虫框架学习

    Scrapy 是用Python实现一个为爬取网站数据.提取结构性数据而编写的应用框架. 一.Scrapy框架简介 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数 ...

  10. Python爬虫-Scrapy框架(四)- 内置爬虫文件 - 4.2 初探Crawl Spider

    Python爬虫-Scrapy框架(四)- 内置爬虫文件 - 4.2 初探Crawl Spider 写在前面 初探Crawl Spider 创建Crawl Spider项目 对比Basic与Crawl ...

最新文章

  1. C#中Path类的常用方法
  2. 《架构师(“拥抱2015”特刊)》发布
  3. 部分常用算法分析总结
  4. java 管理对象是什么_Java工程师(16)对象的管理
  5. vue-cli3配置externals、jquery
  6. linux网卡限速tc,linux tc 对本机网卡限速
  7. 关于内部网络病毒泛滥的一个解决办法
  8. UVa 548 Tree(中序遍历+后序遍历)
  9. rust socket 客户端例子
  10. noi 8780 拦截导弹
  11. 微信客户端电脑版_【电脑】微信客户端数据自动删除工具 再也不用担心电脑内存了...
  12. 传输层协议(3):TCP 连接(中)
  13. mysql 面试题 总结
  14. 如何从零开始成为一名优秀的程序员?---转载、翻译自Quora
  15. snappy格式解析
  16. android baseview,Android BaseAdapter:在getView()重新输入时conver...
  17. ActiveMq createSession DUPS_OK_ACKNOWLEDGE
  18. 磨砺数年,高效PERC技术终迎好时光
  19. 如何移动桌面文件到计算机,怎么样把电脑桌面文件全部转移到指定文件夹
  20. 万字长文带你玩转2020全国大学生计算机技能应用大赛—C语言模考整理解析

热门文章

  1. 第一章 语音信号处理概述
  2. TFT屏(OCM320240T350)调试总结
  3. 计算机网络实验——网线制作
  4. 怎样python爬虫更换ip地址爬取网站
  5. ubuntu18字符终端不支持中文问题(汉字菱形)
  6. IE associate Fix
  7. iframe使用方法
  8. dnf最新地图编号2020_《DNF》2020搬砖地图有哪些
  9. Jmeter小程序压力测试案例
  10. Python——百度识图-相似图片爬虫下载解决方案