python爬虫工程师 成长之路六(三) Scrapy框架基础


Scrapy框架介绍


  • Scrapy是Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。
  • Scrapy吸引人的地方在于它是一个框架,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等,最新版本又提供了web2.0爬虫的支持。
    [来自百度百科]

Scrapy架构及运行流程


五个功能模块

  • 引擎(Scrapy Engine): 用来处理整个系统的数据流处理, 数据流的指挥官,负责控制数据流,控制各个模块之间的通信
  • 调度器(Scheduler): 负责引擎发过来的请求URL,入队行成一个URL的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址
  • 下载器(Downloader): 用于下载网页内容, 并将网页内容返回给引擎Scrapy
  • 爬虫(Spiders): 爬虫是主要干活的, 用于从特定的网页中提取自己需要的信息, 即Item。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面
  • 项目管道(item Pipeline): 负责处理爬虫从网页中抽取的实体,主要的功能是处理或加工来自item的数据。

三大中间件

  • 下载器中间件(Downloader Middlewares): 位于Scrapy引擎和下载器之间的框架,主要是处理Scrapy引擎与下载器之间的请求及响应。
  • 爬虫中间件(Spider Middlewares): 介于Scrapy引擎和爬虫之间的框架,主要工作是处理蜘蛛的响应输入和请求输出。
  • 调度中间件(Scheduler Middewares): 介于Scrapy引擎和调度之间的中间件,从Scrapy引擎发送到调度的请求和响应。

Scrapy整体架构:
在这里插入图片描述
Scrapy运行流程:

  • ①:scheduler从待下载队列中获取url
  • ②:scheduler调用spider来爬取网页
  • ③:downloader将网页下载之后传给spider
  • ④:提取目标数据,抽取出目标对象(item)交给实体管道(item pipeline)进行在加工
  • ⑤:将提取出来的url放入request队列中

Scrapy爬虫项目创建


  1. 在命令行中cd进入项目存储的路径

    如,将项目存在D:/Pycharm下
    
    D:
    cd D:/pycharm
    

    在这里插入图片描述

  2. 使用‘scrapy startproject项目名’创建新项目

    如创建myscrapy
    
    scrapy startproject myscrapy
    

    在这里插入图片描述

  3. 利用python编辑器打开该项目

    如,用pycharm打开myscrapy
    

    在这里插入图片描述


Scrapy项目目录结构


创建好的Scrapy项目如下

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

  • 1:项目
  • 2:项目核心目录,用来放置爬虫相关文件
  • 3:项目配置文件
    在这里插入图片描述
  • 1:项目初始化文件,里面是项目的初始化信息
  • 2:项目数据容器文件,用来定义我们需要获取的数据
  • 3:项目管道文件,对item中数据进行再加工
  • 4:项目设置文件

Scrapy项目 item


item常用结构化数据来保存一些爬取到关键信息

结构化数据:用于保存爬取到的一些关键数据,如网址,关键词等;
#定义结构化数据
数据名=scrapy.Field()
#如定义网站url
url=scrapy.Field()

Scrapy项目 spider


Spider
scrapy.spiders.spider是用于我们自定义爬取所需数据的类。
创建spider需继承scrapy.Spider类,同时需要定义三个属性:

  • name:spider的名字,不能重复
  • start_urls:初始URL列表。当没有制定特定的URL时,spider将从该列表中开始进行爬取。
  • parse(self,response):当请求url返回网页没有指定回调函数时,默认下载回调方法。
    该函数负责解析下载后的网页,并生成下一个的URL;每次下载URL完后都需要调用该函数

可选属性:

  • allowed_domains:包含了spider允许爬取的域名(domain)列表
  • start_requests()
    当spider启动爬取并且未指定start_urls时,该方法被调用。

CrawlSpider
scrapy.spiders.CrawlSpider比scrapy.spiders.spider复杂一点的spider,在CrawlSpider中定义了一些rule用于跟进link,所以CrawlSpider比spider多一个基本属性:

  • rule:包含一个(或多个) 规则对象的列表。 每个Rule对爬取网站的动作定义了特定操作。 如果多个rule匹配了相同的链接,则根据规则在列表中被定义的顺序,第一个会被使用。

Rule(link_extractor, callback=None, cb_kwargs=None, follow=None, process_links=None, process_request=None)

  • rule定义函数
  • link_extractor:其定义了如何从爬取到的页面中提取链接。
  • callback:指定spider中哪个函数将会被调用。 从link_extractor中每获取到链接时将会调用该函数。该回调函数接受一个response作为其第一个参数(不能指定parse为callback,否则会报错)
  • cb_kwargs:包含传递给回调函数的参数(keyword argument)的字典。
  • follow:是一个布尔(boolean)值,指定了根据该规则从response提取的链接是否需要跟进。 如果callback为None,follow默认设置为True ,否则默认为False。
  • process_links:指定该spider中哪个的函数将会被调用,从link_extractor中获取到链接列表时将会调用该函数。该方法常用于过滤参数
  • process_request:指定该spider中哪个的函数将会被调用,该规则提取到每个request时都会调用该函数 (用来过滤request)

Scrapy项目 selector


selector常用于提取item,selector中内置XPath和CSS Selector表达式机制。
selector有四个基本方法:

  • xpath():传入xpath表达式,以列表返回所有满足条件的节点
  • css():传入css表达式,以列表返回所有满足条件的节点
  • extract():序列化该节点,将其转换为unicode的字符串并以list形式返回
  • re():传入正则表达式,以unicode字符串的list形式返回

Scrapy项目 item pipeline


spider在获取到item之后会将其传到item pipeline,在item pipeline中可以定义一些对item的操作,如对数据查重,保存数据或检验数据


item pipeline组件是一个独立的python类,定义时需实现process_item方法,spider获取到item之后调用该方法
process_item(self,item,spider)

  • item:爬取到的结构化数据
  • spider:爬取该item的spider
发布了85 篇原创文章 · 获赞 158 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/Late_whale/article/details/104672997
今日推荐