python爬虫基础(6)-- scrapy框架

八、scrapy框架

8.1、简介

8.1.1、概念

就是一个集成了很多功能并且具有很强通用性的一个项目模板。

8.1.2、功能

高性能的持久化存储

异步的数据下载

高性能的数据解析

分布式的封装

8.2、环境安装

pip install scrapy

Mac or linux:

pip install scrapy

windows :

pip install wheel

下载twisted,下载地址为 http://www.lfd.uci.edu/~gohlke/ pythonlibs/#twisted

安装twisted:pip install Twisted-17.1.0-cp36-cp36m-win_amd64. whl

pip install pywin32

pip install scrapy

测试:在终端里录入scrapy指令,没有报错即表示安装成功!

8.3、使用步骤

创建一个工程:

scrapy startproject xxxPro
在这里插入图片描述
在spiders子目录中创建一个爬虫文件

scrapy genspider spiderName www.xxx.com

8.4、框架的一些基本设置详解

在这里插入图片描述在这里插入图片描述在这里插入图片描述

8.5、数据解析

● xpath返回的是列表但是列表元素一定是Selector类型的对象
● extract可以将Selector对象中data参数存储的字符串提取出来
● 列表调用了extract之后。则表示将列表中每个Selector对象中data对应的字符串提取了出来
在这里插入图片描述

8.6、持久化存储

8.6.1、基于终端指令:

要求:只可以将parse方法的返回值存堵到本地的文本文件中

注意:持久化存储对应的文本文件的类型只可以为:(‘json’, ‘jsonlines’, ‘jl’, ‘csv’, ‘xml’, ‘marshal’, ‘pickle’)类型

指令: scrapy crawl 爬虫文件名 -o ./文件名.csv

好处:简介高效便捷

缺点:局限性比较强(数据只可以存储到指定后缀的文本文件中)
在这里插入图片描述

8.6.2、基于管道

编码流程:

① 数据解析

② 在item类中定义相关的属性

③ 将解析的数据封装存储到item类型的对象

④ 将item类型的对象提交给管道进行持久化存储的操作
在这里插入图片描述

⑤ 在管道类的process_item中要将其接受到的item对象中存储的数 据进行持久化存储操作,该方法可以接收爬虫文件提交过来的item 对象,每接收一个item就会被调用一次
在这里插入图片描述

⑥ 配置文件中开启管道
在这里插入图片描述

# 300表示的是优先级,数值越小优先级越

代码演示:

在这里插入图片描述

8.6.3、基于管道(不同方式同时存储)

注意:

① 爬虫文件提交的item只会给管道文件中第个被执行的管道类接受

② process_item中的return item表示将item传递给下一个即将被执行的管道类。

③ 管道文件中一个管道类对应的是将数据存储到一种平台

pipelines.py演示:

在这里插入图片描述
在这里插入图片描述

settings.py演示:

在这里插入图片描述

8.7、基于Spiper的全站数据爬取

就是将网站中某板块下的全部页码对应的页面数据进行爬取

需求:

爬取校花网中的照片的名称

实现方式:

将所有页面的url添加到start_urls列表(不推荐)

在这里插入图片描述

自行手动进行请求发送(推荐)

yield scrapy.Request(url,callback):callback专门用做于数据解析
在这里插入图片描述

8.8、五大核心组件

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

8.9、请求传参

使用场景:

如果爬取解析的数据不在同一张页面中。(深度爬取)

请求传参:

meta={}可以将meta字典传递给请求对应的回调函数

在这里插入图片描述
在这里插入图片描述

8.10、图片数据爬取ImagesPipeline

基于scrapy爬取字符串类型的数据和爬取图片类型的数据区别

● 字符串:只需要基于xpath进行解析且提交管道进行持久化存储

● 图片: xpath解出图片src的属性值。单独的对图片地址发起请求获取 图片二进制类型的数据

8.10.1、ImagesPipeline :

只需要将img的src的属性值进行解析,提交到管道,管道就会对图片的src进行请求发送获取图片的二进制类型的数据,且还会帮我们进行持久化存储

8.10.2、使用流程

分析:

● 数据解析(图片的地址)

● 将存储图片地址的item提交到制定的管道类

● 在管道文件中自定制一个基于ImagesPipeLine的一个管道类

▶ get_ media_ request

▶ file_ path

▶ item completed

● 在配置文件中:

▶ 指定图片存储的目录:IMAGES_STORE =’./imgs’

▶ 指定开启的管道:自定制的管道类。

管道类编写:

在这里插入图片描述

配置文件添加:

IMAGES_STORE = ‘/imgs’,表示最终图片存储的目录

爬虫类:

在这里插入图片描述

8.11、中间件的使用

8.11.1、下载中间件

位置:

引擎和下载器之间

作用:

批量拦截到整个工程中发起的所有的请求和响应

拦截请求(作用):

▶ UA伪装 :写到process_ request

▶ 代理IP :写到 process_ exception: return request

拦截响应(作用):

▶ 篡改响应数据,响应对象

8.11.2、UA池

user_agent_list = ["Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 ""(KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1","Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 ""(KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 ""(KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 ""(KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6","Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 ""(KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1","Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 ""(KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5","Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 ""(KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 ""(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3","Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 ""(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 ""(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 ""(KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 ""(KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 ""(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 ""(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3","Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 ""(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 ""(KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3","Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 ""(KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24","Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 ""(KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"

]

8.11.3、拦截请求案例

middlewares.py的编写:

在这里插入图片描述

test.py的编写:

在这里插入图片描述

8.11.4、拦截响应案例

xinWen.py编写:

在这里插入图片描述
在这里插入图片描述

items.py编写:

在这里插入图片描述

pipelines.py编写:

在这里插入图片描述

middlewares.py编写:

在这里插入图片描述
在这里插入图片描述

8.12、CrawlSpider

8.12.1、简介

CrawlSpider类,是Spider的一个子类

8.12.2、全站数据爬取的方式

● 基于Spider:手动请求

● 基于CrawlSpider

8.12.3、组件介绍

链接提取器:

根据指定规则(allow="正则)进行指定链接的提取
在这里插入图片描述

规则解析器:

将链接提取器提取到的链接进行指定规则(callback)的解析操作

在这里插入图片描述

Followe:

Followe=Trues可以将链接提取器 继续作用到 链接提取器提取到的链接 所对应的页面中

在这里插入图片描述

8.12.4、使用步骤

创建一个工程

cd xxx

创建爬虫文件(CrawlSpider)

scrapy genspider -t crawl xxx www.xxx.com

8.12.5、案例1

pipelines.py:

在这里插入图片描述

items.py:

在这里插入图片描述

test.py:

在这里插入图片描述

8.12.5、案例2

pipelines.py:

在这里插入图片描述

items.py:

在这里插入图片描述

test.py:

在这里插入图片描述

在这里插入图片描述

8.12、分布式爬虫

8.12.1、概念

我们需要搭建一个分布式的机群,让其对一组 资源进行分布联合爬取。

8.12.2、作用

提升爬取数据的效率

8.12.3、环境搭建

安装一个scrapy-redis的组件

8.12.4、补充

为什么原生的scrapy不可以实现分布式?

● 调度器不可以被分布式机群共享。

● 管道不可以被分布式机群共享。

scrapy-redis组件作用:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值