一、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的文件,里面就是百度贴吧网页源码

(八) 爬虫教程 |Scrapy框架的使用相关推荐

  1. 14. python爬虫——基于scrapy框架爬取糗事百科上的段子内容

    python爬虫--基于scrapy框架爬取糗事百科上的段子内容 1.需求 2.分析及实现 3.实现效果 4.进行持久化存储 (1)基于终端指令 (2)基于管道 [前置知识]python爬虫--scr ...

  2. python爬虫之Scrapy框架的post请求和核心组件的工作 流程

    python爬虫之Scrapy框架的post请求和核心组件的工作 流程 一 Scrapy的post请求的实现 在爬虫文件中的爬虫类继承了Spider父类中的start_urls,该方法就可以对star ...

  3. scrapy获取a标签的连接_python爬虫——基于scrapy框架爬取网易新闻内容

    python爬虫--基于scrapy框架爬取网易新闻内容 1.需求[前期准备] 2.分析及代码实现(1)获取五大板块详情页url(2)解析每个板块(3)解析每个模块里的标题中详情页信息 点击此处,获取 ...

  4. Python爬虫之scrapy框架360全网图片爬取

    Python爬虫之scrapy框架360全网图片爬取 在这里先祝贺大家程序员节快乐,在此我也有一个好消息送给大家,本人已开通了微信公众号,我会把资源放在公众号上,还请大家小手动一动,关注过微信公众号, ...

  5. Python爬虫之Scrapy框架爬虫实战

    Python爬虫中Scrapy框架应用非常广泛,经常被人用于属于挖掘.检测以及自动化测试类项目,为啥说Scrapy框架作为半成品我们又该如何利用好呢 ?下面的实战案例值得大家看看. 目录: 1.Scr ...

  6. 19. python爬虫——基于scrapy框架爬取网易新闻内容

    python爬虫--基于scrapy框架爬取网易新闻内容 1.需求 [前期准备] 2.分析及代码实现 (1)获取五大板块详情页url (2)解析每个板块 (3)解析每个模块里的标题中详情页信息 1.需 ...

  7. Python3爬虫之Scrapy框架的下载器中间件

    Python爬虫之Scrapy框架的下载器中间件 基本介绍 下载器中间键可以为我们设置多个代理ip与请求头,达到反反爬虫的目的 下面是scrapy为我们创建好的中间件的类 下面是中间件中的下载器函数, ...

  8. python爬虫——用Scrapy框架爬取阳光电影的所有电影

    python爬虫--用Scrapy框架爬取阳光电影的所有电影 1.附上效果图 2.阳光电影网址http://www.ygdy8.net/index.html 3.先写好开始的网址 name = 'yg ...

  9. 爬虫之Scrapy框架爬取彼岸壁纸案例分享

    爬虫之Scrapy框架爬取彼岸壁纸案例分享 前段时间在网上看到有人爬取了彼岸壁纸的案例,由于爬取的图片较多,爬取速度感觉不快,所以就自己写了个Scrapy框架,个人觉得爬取速度快多了. 代码如下. 文 ...

  10. Python网络爬虫数据采集实战(八):Scrapy框架爬取QQ音乐存入MongoDB

    通过前七章的学习,相信大家对整个爬虫有了一个比较全貌的了解 ,其中分别涉及四个案例:静态网页爬取.动态Ajax网页爬取.Selenium浏览器模拟爬取和Fillder今日头条app爬取,基本涵盖了爬虫 ...

最新文章

  1. 高通 MSM8K bootloader 之三: LK
  2. sublime3配置pythonIDE
  3. 什么叫做“假学习”?什么叫做“真学习”?
  4. [云炬创业基础笔记]第四章测试18
  5. android 获得手机外插SD卡 存储路径和存储空间
  6. 通宵爆肝:C语言下的平衡二叉树(Avl)原来如此简单!
  7. Python学习笔记:模块与包
  8. 作业4:结对编程项目四则运算
  9. python对文件的读取
  10. oracle 弱口令扫描器,超级弱口令检查工具
  11. el-table render-header 实现多级 表头
  12. SCS【1】今天开启单细胞之旅,述说单细胞测序的前世今生
  13. Python学习之——列表、字典、实验低配版非诚勿扰
  14. sql server(MsSql)字段命名,表命名,视图命名,SQL语句书写参考
  15. Oracle 分析函数(Analytic Functions) 说明
  16. 谷歌浏览器驱动国内镜像下载地址
  17. 【luoguP5550】Chino的数列
  18. Kotlin 的?和!!
  19. python将pyc转为py
  20. 小米手机短信定位服务激活失败

热门文章

  1. GoFW|网页加速器
  2. JAVA解析IP地址
  3. 企业上云“行稳致远”,新钛云服“服务+产品”模式升级上云、用云新思维 | 爱分析洞见...
  4. 上海好吃加好玩-详细分类版
  5. win10 将中文名修改成英文名
  6. 免费的局域网协作办公方式—onlyoffice文档协作
  7. [常用类]Instant类的使用
  8. 管理软件开发的最高境界,那就是“无代码开发”
  9. 区块链项目_身份识别系统CryptID
  10. AOE网络-关键路径