(八) 爬虫教程 |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的文件,里面就是百度贴吧网页源码
(八) 爬虫教程 |Scrapy框架的使用相关推荐
- 14. python爬虫——基于scrapy框架爬取糗事百科上的段子内容
python爬虫--基于scrapy框架爬取糗事百科上的段子内容 1.需求 2.分析及实现 3.实现效果 4.进行持久化存储 (1)基于终端指令 (2)基于管道 [前置知识]python爬虫--scr ...
- python爬虫之Scrapy框架的post请求和核心组件的工作 流程
python爬虫之Scrapy框架的post请求和核心组件的工作 流程 一 Scrapy的post请求的实现 在爬虫文件中的爬虫类继承了Spider父类中的start_urls,该方法就可以对star ...
- scrapy获取a标签的连接_python爬虫——基于scrapy框架爬取网易新闻内容
python爬虫--基于scrapy框架爬取网易新闻内容 1.需求[前期准备] 2.分析及代码实现(1)获取五大板块详情页url(2)解析每个板块(3)解析每个模块里的标题中详情页信息 点击此处,获取 ...
- Python爬虫之scrapy框架360全网图片爬取
Python爬虫之scrapy框架360全网图片爬取 在这里先祝贺大家程序员节快乐,在此我也有一个好消息送给大家,本人已开通了微信公众号,我会把资源放在公众号上,还请大家小手动一动,关注过微信公众号, ...
- Python爬虫之Scrapy框架爬虫实战
Python爬虫中Scrapy框架应用非常广泛,经常被人用于属于挖掘.检测以及自动化测试类项目,为啥说Scrapy框架作为半成品我们又该如何利用好呢 ?下面的实战案例值得大家看看. 目录: 1.Scr ...
- 19. python爬虫——基于scrapy框架爬取网易新闻内容
python爬虫--基于scrapy框架爬取网易新闻内容 1.需求 [前期准备] 2.分析及代码实现 (1)获取五大板块详情页url (2)解析每个板块 (3)解析每个模块里的标题中详情页信息 1.需 ...
- Python3爬虫之Scrapy框架的下载器中间件
Python爬虫之Scrapy框架的下载器中间件 基本介绍 下载器中间键可以为我们设置多个代理ip与请求头,达到反反爬虫的目的 下面是scrapy为我们创建好的中间件的类 下面是中间件中的下载器函数, ...
- python爬虫——用Scrapy框架爬取阳光电影的所有电影
python爬虫--用Scrapy框架爬取阳光电影的所有电影 1.附上效果图 2.阳光电影网址http://www.ygdy8.net/index.html 3.先写好开始的网址 name = 'yg ...
- 爬虫之Scrapy框架爬取彼岸壁纸案例分享
爬虫之Scrapy框架爬取彼岸壁纸案例分享 前段时间在网上看到有人爬取了彼岸壁纸的案例,由于爬取的图片较多,爬取速度感觉不快,所以就自己写了个Scrapy框架,个人觉得爬取速度快多了. 代码如下. 文 ...
- Python网络爬虫数据采集实战(八):Scrapy框架爬取QQ音乐存入MongoDB
通过前七章的学习,相信大家对整个爬虫有了一个比较全貌的了解 ,其中分别涉及四个案例:静态网页爬取.动态Ajax网页爬取.Selenium浏览器模拟爬取和Fillder今日头条app爬取,基本涵盖了爬虫 ...
最新文章
- 高通 MSM8K bootloader 之三: LK
- sublime3配置pythonIDE
- 什么叫做“假学习”?什么叫做“真学习”?
- [云炬创业基础笔记]第四章测试18
- android 获得手机外插SD卡 存储路径和存储空间
- 通宵爆肝:C语言下的平衡二叉树(Avl)原来如此简单!
- Python学习笔记:模块与包
- 作业4:结对编程项目四则运算
- python对文件的读取
- oracle 弱口令扫描器,超级弱口令检查工具
- el-table render-header 实现多级 表头
- SCS【1】今天开启单细胞之旅,述说单细胞测序的前世今生
- Python学习之——列表、字典、实验低配版非诚勿扰
- sql server(MsSql)字段命名,表命名,视图命名,SQL语句书写参考
- Oracle 分析函数(Analytic Functions) 说明
- 谷歌浏览器驱动国内镜像下载地址
- 【luoguP5550】Chino的数列
- Kotlin 的?和!!
- python将pyc转为py
- 小米手机短信定位服务激活失败
热门文章
- GoFW|网页加速器
- JAVA解析IP地址
- 企业上云“行稳致远”,新钛云服“服务+产品”模式升级上云、用云新思维 | 爱分析洞见...
- 上海好吃加好玩-详细分类版
- win10 将中文名修改成英文名
- 免费的局域网协作办公方式—onlyoffice文档协作
- [常用类]Instant类的使用
- 管理软件开发的最高境界,那就是“无代码开发”
- 区块链项目_身份识别系统CryptID
- AOE网络-关键路径