爬虫第六章 scrapy的具体应用 5大核心组件 scrapy持久化存储 请求传参

scrapy的数据解析数据库

在scrapy中咱们使用xpath解析到的数据都被封装到了一个selector对象中,咱们须要的字符串数据也都封装到这个对象中了
若是咱们能够肯定xpath返回的列表中只有一个对象,用extract_first(),若是不是一个值,则用extract()便可.

scrapy的持久化存储框架

scrapy的持久化存储分为两种:
    一种是基于终端指令的,另外一种是基于管道的

基于终端指令:
    能够将parse方法的返回值对应的数据进行本地磁盘的持久化存储
    scrapy crawl pcName -o fliePath
    缺点: 局限性较强(只能是特定的文件格式,而且数据不能存储到数据库中)
    优势: 便捷,简单
基于管道:
  1.数据解析
  2.在item类中进行相关属性的封装
  3.实例化一个item类型的对象
  4.将解析到的数据存储到item对象中
  5.将item交给管道
  6.在配置文件中开启管道
注意事项:
  爬虫文件提交的item只会提交到第一个被执行的管道中
  在管道类中的process_item方法中return item,是将item传递给下一个即将被执行的管道类
  习惯: 在每一个process_item方法执行后都须要写return item

进行全站数据爬取异步

手动发起get请求
    yield scrapy.Request(url,callback)

手动发起post请求
    yield scrapy.FormRequest(url,callback,formdata)
        url : 向哪一个网站发起请求
        callback : 回调函数
        formdata: 请求时发送的参数

若是想要将起始列表中的url进行post请求的发送,须要重写父类中的方法

def start_requests(self):
    for url in self.start_urls:
        data={
            'name':'xixi'
            }
        yield scrapy.FormRequest(url,callback=self.parse,formdata=data)

scrapy的五大核心组件scrapy

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

执行流程:ide

1.爬虫对象将url封装成请求对象发送给引擎(可能有不少个请求对象)

2.引擎拿到请求对象以后,会把他传递给调度器,调度器中会先通过过滤器过滤掉重复的请求对象,而后将这些对象存放在队列中

3.将队列中的一个对象传递给引擎

4.引擎将对象传递给下载器

5.下载器经过发送请求向互联网发送请求

6.互联网返回给下载器数据

7.下载器将数据传递给引擎

8.引擎将数据传递给爬虫数据,而后进行数据解析等操做

9.解析完成后,爬虫程序将解析的数据发送给引擎.

10.引擎将数据传递给管道,进行数据的持久化存储

请求传参:函数

使用场景:
    爬取的数据没有在用一个页面上
如何实现:
    在手动发送请求时,能够将一个字典传递给回调函数
    yield scrapy.Resquest(url,callback,meta)
    callback取值meta字典值:
        response.meta['xxx']
相关文章
相关标签/搜索