scrapy爬虫框架

0x00 scrapy爬虫框架


scrapy库的安装:

可以直接使用pip install scrapy来安装,如果IDE是pycharm的话参考之前requests库的安装

scrapy爬虫框架结构:

scrapy采用5+2的结构,五个主要模块加上两个中间键

 

详细介绍一下各个组件:

    • 引擎(Engine)
      用来处理整个系统的数据流, 触发事务(框架核心)
    • 调度器(Scheduler)
      用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址
    • 下载器(Downloader)
      用于下载网页内容, 并将网页内容返回给蜘蛛(Scrapy下载器是建立在twisted这个高效的异步模型上的)
    • 爬虫(Spiders)
      爬虫是主要干活的, 用于从特定的网页中提取自己需要的信息, 即所谓的实体(Item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面
    • 项目管道(Pipeline)
      负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。当页面被爬虫解析后,将被发送到项目管道,并经过几个特定的次序处理数据。
    • 下载器中间件(Downloader Middlewares)
      位于Scrapy引擎和下载器之间的框架,主要是处理Scrapy引擎与下载器之间的请求及响应。
    • 爬虫中间件(Spider Middlewares)
      介于Scrapy引擎和爬虫之间的框架,主要工作是处理蜘蛛的响应输入和请求输出。
    • 调度中间件(Scheduler Middewares)
      介于Scrapy引擎和调度之间的中间件,从Scrapy引擎发送到调度的请求和响应。

 这里需要用户去编写的是spider模块和pipeline模块,前者作为一个爬虫数据的入口,后者则是数据的出口

 

scrapy命令行格式:

命令:

 

 

0x01 scrapy爬虫框架实例


首先在cmd命令中新建一个scrapy的项目

 

这行命令就是在D盘的pycode文件夹中新建python123demo项目 ,接着可以直接导入pycharm中

这里可以清楚地看到项目中已经给了我们一些文件

现在项目里都是空的,所以需要我们生成一个爬虫

 

这一段的意思就是生成一个名为demo的爬虫,爬取的网站是python123.io

回到pycharm中,我们发现spiders文件夹下生成了一个demo.py的文件

 

接下来就是要配置爬虫,修改demo.py文件,这段代码实现一个网页的下载

import scrapy


class DemoSpider(scrapy.Spider):
    name = 'demo'
    #allowed_domains = ['python123.io']
    start_urls = ['http://python123.io/ws/demo.html']

    def parse(self, response):
        fname = response.url.split('/')[-1]
        with open(fname, 'wb') as f:
            f.write(response.body)
        self.log('Saved file %s.' % fname)

接着去cmd中执行命令运行爬虫

这里可能会报错,解决办法:ModuleNotFoundError: No module named 'win32api'

 

 安装成功后执行原来的命令,成功在当前目录下生成demo.html文件

 

0x01 scrapy爬虫使用

 


yield关键字的使用:

 

举个例子:要遍历连续自然数的平方可以用一下代码实现:

第一段代码使用生成器的写法,gen()函数中每次执行yield命令时,i被冻结直到下一次调用该函数,而第二种方法首先将结果全部存入列表中,当数据量过大时会严重占用存储空间,增加代码运行时间。第一种方法每次进行一次调用,当数据量大的时候速度有明显优势。

 

scrapy爬虫的使用:

步骤1:创建一个工程和spider模板

步骤2:编写spider

步骤3:编写item pipeline

步骤4:优化配置策略

 

爬虫的数据类型:

①request类:像网络上提交请求的内容。

②response类:从网络上爬取内容的封装类。

③item类:由spider产生的信息封装的类

request的属性和方法:

 

response类的属性和方法:

 

 

 

scrapy爬虫提取信息的方法:

 

css selector的使用

 

posted @ 2019-01-15 21:25  Ragd0ll  阅读(199)  评论(0编辑  收藏  举报