从头开发一个爬虫程序是一项烦琐的工作,为了避免因制造轮子而消耗大量时间,在实际应用中我们可以选择使用一些优秀的爬虫框架,使用框架可以降低开发成本,提高程序质量,让我们能够专注于业务逻辑。所以,我们一起来了解开源的爬虫框架Scrapy。

Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中,并且是跨平台的,在Linux、MaxOS以及windows平台都可以使用。

1.Scrapy主要包括了以下组件:

  • 引擎(Scrapy):
    用来处理整个系统的数据流处理, 触发事务(框架核心)

  • 调度器(Scheduler) :
    调度器从引擎接受request并将他们入队,以便之后引擎请求他们时提供给引擎。由它来决定下一个要抓取的网址是什么, 同时去除重复的网址

  • 下载器(Downloader) :
    用于下载网页内容,并将网页内容返回给蜘蛛(Scrapy下载器是建立在twisted这个高效的异步模型上的)

  • 爬虫(Spiders) :
    爬虫是主要干活的, 用于从特定的网页中提取自己需要的信息,即所谓的实体(Item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面

  • 项目管道(Pipeline):
    负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。当页面被爬虫解析后,将被发送到项目管道,并经过几个特定的次序处理数据。

  • 下载器中间件(Downloader Middlewares):
    位于Scrapy引擎和下载器之间的框架,主要是处理Scrapy引擎与下载器之间的请求及响应。

  • 爬虫中间件(Spider Middlewares):
    介于Scrapy引擎和爬虫之间的框架,主要工作是处理蜘蛛的响应输入和请求输出。

  • 调度中间件(Scheduler Middewares) :
    介于Scrapy引擎和调度之间的中间件,从Scrapy引擎发送到调度的请求和响应。

2.Scrapy运行流程大概如下:

  1. 引擎从调度器中取出一个链接(URL)用于接下来的抓取
  2. 引擎把URL封装成一个请求(Request)传给下载器
  3. 下载器把资源下载下来,并封装成应答包(Response)
  4. 引擎将URL通过下载中间件(请求(request)方向)转发给下载器(Downloader)
  5. 解析出实体(Item),则交给实体管道进行进一步的处理
  6. 解析出的是链接(URL),则把URL交给调度器等待抓取
  7. Spider处理Response并返回爬取到的Item及(跟进的)新的Request给引擎
  8. 引擎将(Spider返回的)爬取到的Item给Item Pipeline,将(Spider返回的)Request给调度器

3.scrapy查询语法:

当我们爬取大量的网页,如果自己写正则匹配,会很麻烦,也很浪费时间,令人欣慰的是,scrapy内部支持更简单的查询语法,帮助我们去html中查询我们需要的标签和标签内容以及标签属性。下面逐一进行介绍:

  1. 查询子子孙孙中的某个标签(以div标签为例)://div
  2. 查询儿子中的某个标签(以div标签为例):/div
  3. 查询标签中带有某个class属性的标签://div[@class=‘c1’]即子子孙孙中标签是div且class=‘c1’的标签
  4. 查询标签中带有某个class=‘c1’并且自定义属性name=‘alex’的标签://div[@class=‘c1’][@name=‘alex’]
  5. 查询某个标签的文本内容://div/span/text() 即查询子子孙孙中div下面的span标签中的文本内容
  6. 查询某个属性的值(例如查询a标签的href属性)://a/@href

不知不觉收集了这么多电子书,大部分我都翻过,对于学习Python动力满满,如果你们有其他推荐的书籍也可以在评论区推给我。有需要的也可私信我共享。
Python学习电子书籍:

4.scrapy安装

scrapy官网:https://scrapy.org/
scrapy中文文档:https://www.osgeo.cn/scrapy/intro/overview.html

安装方式

在任意操作系统下,可以使用pip安装Scrapy,例如:

pip install scrapy

安装完成后我们需要测试安装是否成功,通过如下步骤确认:

在终端中测试能否执行scrapy这条命令

scrapy 2.4.0 - no active projectusage:scrapy <command>[options] [args]Available commands :bench        Run quick benchmark testfetch        Fetch a URL using the scrapy down1oadergenspider        Generate new spider using pre-defined temp1atesrunspider        Run a self-contained spider (without creating a project)settings        Get settings valuesshe11        Interactive scraping consolestartproject        create new projectversion        Print scrapy versionview        open URL in browser,as seen by scrapy[ more ]        More commands available when run from project directoryuse "scrapy <command> -h" to see more info about a command

输入scrapy bench测试连通性,如果出现以下情况表示安装成功:

通过了以上两项检测,说明Scrapy安装成功了。如上所示,我们安装的是当前最新版本2.4.0。

注意:

在安装Scrapy的过程中可能会遇到缺少VC++等错误,可以安装缺失模块的离线包

成功安装后,在CMD下运行scrapy出现上图不算真正成功,检测真正是否成功使用scrapybench测试,如果没有提示错误,就代表成功安装。

全局命令

scrapy 2.4.0 - no active projectusage:scrapy <command>[options] [args]Available commands :bench      Run quick benchmark test #测试电脑性能fetch      Fetch a URL using the scrapy down1oader#将源代码下载下来并显示出来genspider      Generate new spider using pre-defined temp1ates#创建一个新的spider文件runspider      Run a self-contained spider (without creating a project)# 这个和通过craw1启动爬虫不同,scrapy runspider爬虫文件名称settings      Get settings values#获取当前的配置信息she11      Interactive scraping console#进入scrapy 的交互模式startproject      create new project#创建爬虫项目version      Print scrapy version#显示scrapy框架的版本view      open URL in browser,as seen by scrapy#将网页document内容下载下来,并且在浏览器显示出来[ more ]      More commands available when run from project directory
use "scrapy <command> -h" to see more info about a command

5.使用scrapy爬虫简洁步骤:

1.新建项目: 创建项目 scrapy project XXX
2. scarpy genspider xxx “http://www.xxx.com”
3. 明确目标:编写 items.py, 明确需要提取的数据
4. 制作爬虫:编写 spiders/xxx.py, 编写爬虫文件,处理请求和响应,以及提取数据(yield item)
5. 存储内容:编写 pipelines.py, 编写管道文件,处理spider返回item数据,比如本地数据持久化,写文件或存到表中
6. 编写 settings.py,启动管道组件ITEM_PIPELINES,以及其他相关设置
7. 执行爬虫 scrapy crawl xxx

有时候被爬取的网站可能做了很多限制,所以,我们请求时可以添加请求报头,scrapy 给我们提供了一个很方便的报头配置的地方,settings.py 中,我们可以开启:

# Crawl responsibly by identifying yourself (and your website) on the user-agent
USER_AGENT = 'Tencent (+http://www.yourdomain.com)'
User-AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6)AppleWebKit/537.36 (KHTML, like Gecko)Chrome/62.0.3202.94 Safari/537.36"# Override the default request headers:
DEFAULT_REQUEST_HEADERS = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Accept-Language': 'en',
}

scrapy 最大的适用场景是爬取静态页面,性能非常强悍,但如果要爬取动态的json数据,那就没必要了。

爬虫基础分享Scrapy框架流程图与安装相关推荐

  1. 爬虫基础(五)-----scrapy框架简介

    ---------------------------------------------------摆脱穷人思维 <五> :拓展自己的视野,适当做一些眼前''无用''的事情,防止进入只关 ...

  2. Python爬虫—Scrapy框架—Win10下载安装

    Python爬虫-Scrapy框架-Win10下载安装 1. 下载wheel 2.下载twisted 3. 下载pywin32 4. 下载安装Scrapy 5. 创建一个scrapy项目 6. fir ...

  3. Python爬虫5.3 — scrapy框架spider[Request和Response]模块的使用

    Python爬虫5.3 - scrapy框架spider[Request和Response]模块的使用 综述 Request对象 scrapy.Request()函数讲解: Response对象 发送 ...

  4. 十 web爬虫讲解2—Scrapy框架爬虫—Scrapy安装—Scrapy指令

    Scrapy框架安装 1.首先,终端执行命令升级pip: python -m pip install --upgrade pip 2.安装,wheel(建议网络安装) pip install whee ...

  5. java启动scrapy爬虫,爬虫入门之Scrapy 框架基础功能(九)详解

    Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非 ...

  6. python爬虫之使用Scrapy框架编写爬虫

    转自:http://www.jb51.net/article/57183.htm 前面的文章我们介绍了Python爬虫框架Scrapy的安装与配置等基本资料,本文我们就来看看如何使用Scrapy框架方 ...

  7. Scrapy框架流程图详解

    (一).Scrapy框架介绍: 我们写一个爬虫,需要做很多事情,比如:发送网络请求.数据解析.数据存储.反爬虫.反反爬虫(更换ip代理.设置请求头等).异步请求等.这些事情在我们每一次写爬虫代码的时候 ...

  8. python爬虫入门(六) Scrapy框架之原理介绍

    Scrapy框架 Scrapy简介 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬 ...

  9. Scrapy框架流程图解析

    今日语:心空,望望远方的高楼:心属,依然停留 接下来就放一张scrapy的架构图喽~(绿线是数据流向) 简单叙述一下每层图的含义吧: Spiders(爬虫):它负责处理所有Responses,从中分析 ...

最新文章

  1. wrs-tuya-cloud
  2. HTML Input 属性
  3. 文件服务器存储,文件服务器存储
  4. Android的第一个工程,Android Things:撸起袖子来创建第一个Things工程
  5. 定义域是取交集吗_高中数学;函数定义域秒解技巧(学好函数突破数学)
  6. 大鱼风控笔记 3:量化风控政策的关注点
  7. C# 图片处理之:彩色图片转为黑白图
  8. maven仓库--私服(Nexus的配置使用)
  9. Mysql的sql语句基础大全,仅供个人笔记参考,由于创建过程只求速度,所以结构比较乱,请不要打开,如有需要,请自行查阅其他文献
  10. 微信字体调大后页面错乱问题
  11. 百度指数批量查询器,百度指数
  12. 如何下载邯郸市卫星地图高清版大图
  13. 彼时彼刻,正如此时此刻——评《让×××飞》
  14. php checkbox多选框默认选中的实现。
  15. 【两周快速入门pr】三、定格动画制作-基础操作成就你的脑洞
  16. cadence修改板框倒角_Allegro软件中如何对板框进行倒角及倒角不成功解决方法
  17. pwm一个时间单位_「硬见小百科」什么是PWM“死区”?
  18. 初见Manjaro:Manjaro 安装配置流程
  19. Jquery字符UrlEncode 编码、解码 --C#UrlEncode
  20. 微信小程序API----授权登录拿到用户头像昵称等信息

热门文章

  1. 华人团队用Transformer做风格迁移,速度快、可试玩,网友却不买账
  2. 研究生第一篇科研论文常犯问题总结
  3. 机器学习中的优化方法小结
  4. 一文看懂 Bahdanau 和 Luong 两种 Attention 机制的区别
  5. 矩阵乘法的优化及其在卷积中的应用
  6. 重磅!GitHub 日收 7000 星, Windows 计算器项目开源即爆红!
  7. 线性回归之梯度下降法介绍
  8. static slice是什么呢?
  9. 基于OpenCV的特定区域提取
  10. 【实战】OpenCV钢管计数分析与方法比较