Scrapy框架的了解与使用

        Scrapy框架是比较常用且成熟的python爬虫框架,可以高效率地爬取web页面并提取出我们关注的结构化数据。前面介绍了手写爬虫的例子,但是每个爬虫都这么写,效率不高,同时造成代码的冗余。而使用爬虫框架可以使代码更加简洁,大大提升效率。本文主要了解一下Scrapy整体的架构、工作流程、常用命令以及创建Scrapy项目。

1.Scrapy架构

        如上图所示,scrapy主要由Scrapy Engine、Scheduler、Downloader Middlewares、Downloader、Spider、Spider Middlewares、Item Pipline组成。

1.Scrapy Engine:是整个Scrapy架构的核心,负责控制整个数据处理流程、触发业务处理。

2.Scheduler:相当于一个优先队列,存储待爬取的网址,并确定这些网址的优先级,决定下一次爬取哪个网址。

3.Downloader:下载根据URL爬取的网页资源。

4.Downloader Middlewares:对Downloader和Scrapy Engine之间的通信进行处理,可以通过加入自定义代码,对Scrapy功能进行扩展。

5.Spider:爬虫组件,即Scrapy项目中的Spider文件夹内的文件,每个Spider负责实现特定的爬虫功能。

6.Spider Middlewares:主要对爬虫组件与Scrapy Engine之间的通信进行处理,加入自定义代码,可以扩展Scrapy功能。

7.Item Pipline:该组件主要用于接收Spider组件提取出来的Item,并对这些Item进行相应的处理。

2.Scrapy工作流程

        1.Scrapy Engine会将爬虫文件中start_urls属性中的网址传递给Scheduler中

        2.Scheduler分析出下一次要爬取的网址,并传递给Scrapy Engine。

        3.Scrapy Engine获取需要爬取的网址,将其传递给Downloader Middlewares

        4.Downloader Middlewares把网址传递给Downloader。

        5.Downloader根据获取到的网址,向互联网对应的网址发送request请求,进行网页的下载。

        6.互联网中对应的网址接收到request请求之后,产生response,并传递给Downloader 。

        7.Downloader 接收到response之后,传递给Downloader Middlewares。

        8.Downloader Middlewares与Scrapy Engine进行通信,将对应的response传递给Scrapy Engine

        9.Scrapy Engine接收到response之后,将其传递给Spider Middlewares。

        10.Spider Middlewares接收到response,将其传递给对应的Spider进行处理。

        11.Spider处理之后,会得到提取出的数据和新的请求信息,Spider会将其传递给Spider Middlewares。

        12.Spider Middlewares将信息传递给Scrapy Engine。

        13.Scrapy Engine获取信息之后,一方面把Item传递给Item Pipline,进一步处理,另一方面将新的请求信息传递给Scheduler,由Scheduler进一步确定网址。

 

3.常用命令

1.scrapy startproject --logfile="log文件路径/x.log"  --loglevel=DEBUG  项目名:表示创建一个Scrapy项目,其中--logfile和--loglevel属性可以缺省。

2.scrapy --logfile="xx"  fetch  网址:显示爬虫爬取的过程。使用--headers属性则会输出网址的headers信息。

3.scrapy view 网址:实现下载某个网页并用浏览器查看

4.scrapy runspider --loglevel=INFO  爬虫文件名(包含后缀):直接运行一个爬虫文件

5.scrapy  crawl  爬虫名:启动爬虫项目中某个爬虫

6.scrapy list:列出当前可以使用的爬虫文件

7.scrapy genspider -l:查看当前可以使用的爬虫模板(一般模板为basic、crawl、csvfeed、xmlfeed)

8.scrapy genspider -t 模板名  爬虫名(不含后缀)  域名:创建爬虫文件

9.Scrapy check  爬虫名:使用合同的方式对爬虫进行测试。

4.建立Scrapy项目简单案例

        该项目是在Pycharm上完成的。

   1.建立爬虫项目:scrapy  startproject  firstproject

以下是项目结构: 

     其中firstproject表示项目名,内部还会生成一个同名文件夹,表示项目核心文件夹,spiders包里面存放着不同的爬虫文件;items.py表示希望爬取的数据结构;middlewares.py表示中间件文件,里面存放一些自定义代码用于Scrapy的扩展;piplines.py主要对items.py里面定义的数据进一步的处理;settings.py里面包含一些对爬虫项目的设置信息。

注:pycharm需要点击项目右键-->mark directory as -->sources root,将其变成一个文件夹。如下图所示:

 

2.编写items.py

# -*- coding: utf-8 -*-

# Define here the models for your scraped items
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.html

import scrapy


class FirstprojectItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    urlname = scrapy.Field()
    urlkey = scrapy.Field()
    urlcr = scrapy.Field()
    urladdr = scrapy.Field()

          其中urlname、urlkey等是需要提取的信息,将这些属性通过调用scrapy.Field()将其Item化,相当于用对象保存数据。

3.Spider编写

        创建爬虫文件,首先通过模板创建需要的爬虫文件,然后对爬虫文件进行详细编写。

       打开刚建立的爬虫,默认代码如下:

# -*- coding: utf-8 -*-
import scrapy


class FirstSpider(scrapy.Spider):
    name = 'first'
    allowed_domains = ['sina.com.cn']
    start_urls = ['http://sina.com.cn/']

    def parse(self, response):
        pass

 其中,该爬虫继承scrapy.Spider类,name属性表示爬虫名,allowed_domains表示域名,start_urls表示需要爬取的网址,parse(self,response)函数用来对Item进行操作。

修改成本项目需要的代码如下:

# -*- coding: utf-8 -*-
import scrapy

from firstproject.items import FirstprojectItem


class FirstSpider(scrapy.Spider):
    name = 'first'
    allowed_domains = ['sina.com.cn']
    start_urls = ['http://sports.sina.com.cn/basketball/nba/2019-05-09/doc-ihvhiqax7645328.shtml',
                  'http://sports.sina.com.cn/basketball/nba/2019-05-09/doc-ihvhiews0833865.shtml',
                  'http://sports.sina.com.cn/basketball/nba/2019-05-09/doc-ihvhiews0793383.shtml']

    def parse(self, response):
        item = FirstprojectItem()
        item["urlname"] = response.xpath("/html/head/title/text()")
        print(item["urlname"])

 4.运行指定爬虫文件

        这里将运行上述first.py爬虫文件:scrapy crawl  first  --nolog.执行上述命令之后,得到如下结果:

 

        通过本文的讲解,可以初步了解何为Scrapy,Scrapy项目结构以及如何建立Scrapy项目进行爬虫。 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值