(八) 爬虫教程 |Scrapy框架的使用

一、Scrapy框架的介绍

Scrapy是一个基于Twisted 的异步处理框架,是纯 Python 实现的爬虫框架,其架构清晰,模块之间的耦合程度低,可扩展性极强,可以灵活完成各种需求。

1.1架构介绍

  • 1.Engine:引擎,处理整个系统的数据流处理、触发事物
  • Item:项目,它定义了怕去结果的数据结构,爬取的数据会被赋值成该Item对象
  • Scheduler:调度器,接受引擎发过来的请求并将其加入队列中,在引擎再次请求的时候即哪个请求提供给引擎
  • Downloader:下载器,下载网页内容,并将网页内容返回给蜘蛛
  • Spider:蜘蛛,定义了爬虫的逻辑和网页的解析规则,他主要负责解析响应并生成提取结果和新的请求
  • Item Pipeline:项目管道,负责处理由蜘蛛从网页中抽取的项目,它的主要任务是清洗、验证和存储数据
  • Downloader Middlewares:下载器中间件,位于引擎和下载器之间的钩子框架,主要处理引擎与下载器之间的请求及相应
  • Spider Middlewares:蜘蛛的中间件,位于引擎和蜘蛛之间的钩子框架,主要处理蜘蛛输入的响应和输出的结果以及新的请求

在这里插入图片描述

1.2.数据流

Scrapy中的数据流由引擎控制,通过多个组件的相互协作、不同完成工作的不同、组件对异步处理的支持,Scrapy最大限度也利用了网络宽带,大大提高了数据爬取和处理的效率。数据流的过程如下:

  • 1.Engine首先打开一个网站,找到处理该网站的Spider,并向该Spider请求第一个要爬取的URL
  • 2.Engine从Spider中获取到第一个要爬取的URL,并通过Scheduler以Request的形式调度
  • 3.Engine向Scheduler请求下一个要爬取的URL
  • 4.Scheduler返回下一个要爬取的URL给Engine,Engine将URL通过Downloader
  • 5.一旦页面下载完毕,Downloader生成页面的Response,并将其通过Downloader Middlewares
  • 6.Engine从下载器中接收到Response,并将其通过Spider Middlewares发送给Spider处理
  • 7.Spider处理Response,并返回爬取到的Item及新的Request给Engine
  • 8.Engine将Spider返回的Item给Item Pipeline,将新的Request给Scheduler
  • 9.重复(2)-(8)的步骤,直到Scheduler中没有更多的Request,Engine关闭该网站,爬取结束

在这里插入图片描述

二、Scrapy安装

Scrapy 一个十分强大的爬虫框架 ,依赖的库比较多 ,至少需要依赖的库有 Twisted 14.0、lxml 3.4、pyOpenSSL0.14。在不同的平台环境下,它所依赖的库也各不相同,所以在安装之前,最好确保把这些基本库安装好。

  • 1.首先我们安装好Anaconda,此前我有些过关于关于conda的使用博客可以参考
  • 2.安装好conda,就可以直接通过命令安装Scrapy
pip install Scrapy

2.1.验证安装

安装之后,在命令行下输入scrapy,出现类似如下图,就证明Scrapy安装完成
在这里插入图片描述

三、Scrapy入门

3.1创建项目

  • 1.我们在终端中输入此命令,这个命令可以在任意文件夹运行
  • 2.这个命令将会创建一个名为once的文件夹
  • 3.如果提示权限问题,可以加sudo运行该命令
scrapy startproject once

在这里插入图片描述

  • 文件夹结构如下所示:

    • scrapy.cfg Scrapy部署时的配置文件
    • once 项目的模块,需要从这里引入
    • __ init__.py
    • item.py Item的定义,定义爬取的数据结构
    • middlewares.py Middlewares的定义,定义爬取时的中间件
    • pipelines.py Pipelines的定义,定义数据管道
    • settings.py 配置文件
    • spiders 配置文件

在这里插入图片描述

3.2创建Spider

Spider是自己定义的类,Scrapy 用它来从网页里抓取内容,并解析抓取的结果。不过这个类必须继承 Scrapy 提供的Spider类scrapy.Spider ,还要定义 Spider 的名称和起始请求,以及怎样处理爬取的结果的方法

  • 1.首先进入scrapy爬虫
cd once
  • 2.然后在执行如下命令(生成一个名称为baidutieba的spider),生成的baidutieba.py在文件once文件里面的spiders目录下
scrapy genspider baidutieba baidu.com

在这里插入图片描述
这里有三个属性 — name、allowed_domains、start_urls还有一个方法parse

  • name:它是每个项目唯一的名字,用来区分不同的Spider
  • allowed_domains:它是允许爬取的域名,如果初始或后续的请求链接不是这个域名下的,则请求链接会被过滤掉
  • start_urls:它包含了Spider在启动时爬去的url列表,初始请求是由它来定义的
  • parse:它是Spider的一个方法。默认情况下,被调用时start_urls里面的链接构成的请求完成下载执行后,返回的响应就会作为唯一的参数传递给这个函数。该方法负责解析返回的响应、提取数据或者进一步生成要处理的请求
    在这里插入图片描述

三、项目文件详情

  • BOT_NAME:项目名
  • SPIDER_MODULES:Scrapy搜索spider的模块列表 默认: [xxx.spiders]
  • NEWSPIDER_MODULE:使用 genspider 命令创建新spider的模块。默认: ‘xxx.spiders’
  • USER_AGENT:默认是注释的,如果不写很容易被判断为电脑USER_AGENT = ‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36’
  • ROBOTSTXT_OBEY:如果启用,Scrapy将会采用 robots.txt策略
  • CONCURRENT_REQUESTS:Scrapy downloader 并发请求(concurrent requests)的最大值,默认: 16
  • DOWNLOAD_DELAY:下载器在下载同一个网站下一个页面前需要等待的时间,该选项可以用来限制爬取速度,减轻服务器压力。同时也支持小数:0.25 以秒为单位
  • 下载延迟设置只有一个有效
    • CONCURRENT_REQUESTS_PER_DOMAIN:对单个网站进行并发请求的最大值。
    • CONCURRENT_REQUESTS_PER_IP = 16:对单个IP进行并发请求的最大值。如果非0,则忽略 CONCURRENT_REQUESTS_PER_DOMAIN 设定,使用该设定。 也就是说,并发限制将针对IP,而不是网站。该设定也影响 DOWNLOAD_DELAY: 如果 CONCURRENT_REQUESTS_PER_IP 非0,下载延迟应用在IP而不是网站上。
  • COOKIES_ENABLED :禁用Cookie(默认情况下启用)
  • TELNETCONSOLE_ENABLED:禁用Telnet控制台(默认启用)

在这里插入图片描述

  • DEFAULT_REQUEST_HEADERS:覆盖默认请求标头
  • SPIDER_MIDDLEWARES:启用或禁用蜘蛛中间件
  • DOWNLOADER_MIDDLEWARES:启用或禁用下载器中间件
  • EXTENSIONS:启用或禁用扩展程序
  • ITEM_PIPELINES:配置项目管道

在这里插入图片描述

  • AUTOTHROTTLE_ENABLED:启用和配置AutoThrottle扩展(默认情况下禁用)
  • AUTOTHROTTLE_START_DELAY:初始下载延迟
  • AUTOTHROTTLE_MAX_DELAY:在高延迟的情况下设置的最大下载延迟
  • AUTOTHROTTLE_TARGET_CONCURRENCY:Scrapy请求的平均数量应该并行发送每个远程服务器
  • AUTOTHROTTLE_DEBUG:启用显示所收到的每个响应的调节统计信息
  • 启用和配置HTTP缓存(默认情况下禁用):
    • #HTTPCACHE_ENABLED
    • HTTPCACHE_EXPIRATION_SECS
    • HTTPCACHE_DIR
    • HTTPCACHE_IGNORE_HTTP_CODES
    • HTTPCACHE_STORAGE
      在这里插入图片描述

四、实战 - Scrapy爬取百度贴吧页面

  • 1.首先,我们打开项目中刚才生成的baidutieba.py文件编写爬取代码
    在这里插入图片描述
  • 2.进入spiders,执行以下命令
cd spiders
scrapy crawl baidutieba
  • 3.回车运行,我们可以发现once目录下生成了一个hello.txt的文件,里面就是百度贴吧网页源码
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值