Scrapy爬虫框架详解

scrapy

scrapy 是什么

scrapy是框架 类似于车子

  • 采用异步框架 实现高效率的网络采集

  • 最强大的框架 没有之一

scrapy 框架结构

在这里插入图片描述

Engine

  • 控制有所模块之间的数据交流
  • 根据条件触发事件

Spider

  • 解析Downloader返回的响应 (Response)

  • 产生爬取项 (scraped item)

  • 产生额外的爬取请求 (Request)

    需要用户编写配置代码

Spider Middleware

  • 目的: 对请求和爬取项的再处理
  • 功能: 修改、丢弃、新增请求或爬取项
    需要用户编写配置代码

Scheduler

  • 对所有爬取请求进行调度管理

Item Pipelines

  • 以流水线方式处理Spider产生的爬取项。

  • 由一组操作顺序组成,类似流水线,每个操作是一个 ItemPipeline 类型

  • 可能操作包括: 清理、检验和查重爬取项中的HTML数据、将数据存储到数据库

    需要用户编写配置代码

Downloader

  • 根据请求下载网页

Downloader Middleware

  • 目的:实施Engine、Scheduler和Downloader之间进行用户可配置的控制
  • 功能: 修改、丢弃、新增请求或响应

scrapy 安装

  • pip install scrapy → 报:VC++14.0 Twisted

      - 解决方案:离线安装 pip install xxx.whl
    
  • scrapy bench 运行的时候 → 报:win32

    • 解决方案:pip install pywin32

创建 scrapy 项目

  • 使用命令行 cd 到 要创建 scrapy 项目的文件夹下

  • 运行命令:scrapy startproject xxx(项目名称)

创建爬虫文件

  • 使用命令行 cd 到scrapy 项目的根文件夹下

  • 运行命令:scrapy genspider Reptile_name(爬虫名称) domain_name(域名)

    注意

    • 爬虫名字不得与项目名称一样

    • 网站域名是允许爬虫采集的域名(限制爬虫数据采集范围)

爬虫文件

import scrapy  # 导入scrapy

创建 爬虫类 并且继承自scrapy.Spider --> 最基础的类 scrapy共有5个爬虫类

	class XicidailiSpider(scrapy.Spider):
	    name = 'xicidaili'  # 爬虫名字 必须唯一
	    allowed_domains = ['www.xicidaili.com']  # 允许的域名(可以不要)
	    start_urls = ['http://www.xicidaili.com/']  # 开始采集的网站
        
    	# 解析响应数据 提取数据 或网址等    response响应数据
    	def parse(self, response):
        	pass

分析网站:

  • 提取数据

    • 正则表达式(基础 必会 难掌握)

    • xpath表达式 → 从HTML中提取数据(scrapy默认提取数据方式)

  • CSS表达式 → 从HTML中提取数据(不建议使用 scrapy中的CCS表达式是转成xpath表达式使用的)

    • response.xpath(’’).get() get() → 得到一个元素 getall → 得到多个元素
  • 运行爬虫

  • scrapy crawl xxx(爬虫名称)

yield scrapy.Request(next_url, callback=self.parse)  #生成器
	
# Request()发出请求 类似于requests.get()
# callback 是将发出去的请求得到的响应数据还交给自己处理
	
# 注意:回调函数 不写()  只写 函数名

  • 执行程序并保存数据

    • scrapy crawl xxx(爬虫名称) -o xxx.json/.csv/.xml

scrapy 常用命令

命令 说明 格式
startproject 创建一个新工程 scrapy startproject xxx_Spider(项目名称)
genspider 创建一个爬虫 scrapy genspider Reptile_name(爬虫名称) domain_name(域名)
settings 获得爬虫配置信息 scrapy genspider [options]
crawl 运行一个爬虫 scrapy crawl xxx(爬虫名称)
list 列出工程中所有爬虫 scrapy list
shell 启动URL调试命令行 scrapy shell [url]

requests 库 VS scrapy 框架

相同点

  • 两者都可以进行页面请求和爬取,Python爬虫的两个重要技术路线

  • 两者可用性都好,文档丰富,入门简单

  • 两者都没有处理js、提交表单、应对验证码等功能(可扩展)

不同点

requests scrapy
页面级爬虫 网站级
功能库 框架
并发考虑不足,性能较差 并发性好,性能较高
重点在于页面下载 重点在于爬虫结构
定制灵活 一般定制灵活,深度定制困难
上手十分简单 入门稍难

技术路线的选择

  • 非常小的需求,requests库
  • 不太小的需求,scrapy框架
  • 定制程度很高的需求(不考虑规模),自搭建框架,requests > scrapy
    较差|并发性好,性能较高
    重点在于页面下载|重点在于爬虫结构
    定制灵活|一般定制灵活,深度定制困难
    上手十分简单|入门稍难

技术路线的选择

  • 非常小的需求,requests库
  • 不太小的需求,scrapy框架
  • 定制程度很高的需求(不考虑规模),自搭建框架,requests > scrapy
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章