Scrapy框架与原始爬虫的区别

原始爬虫

效率低、同步、阻塞

Scrapy框架

效率高、异步、非阻塞

Scrapy的概念

  •   爬虫框架
  •   开发速度快
  •   稳定性高
  •   性能优越

scrapy的流程

  1. 爬虫模块(Spiders)  -->  准备起始URL(Request)  -->   爬虫中间件  -->  引擎   -->   调度器(Scheduler):请求去重, 缓存请求(队列)
  2. 调度器  -->  请求(Request)   -->  引擎   -->  下载器中间件   -->  下载器:发送请求, 获取响应, 把响应封装为Response对象
  3. 下载器 -Response   -->  下载器中间件   -->  引擎   -->  爬虫中间件   -->  爬虫模块:解析响应数据, 提取数据, 提取请求
  4. 爬虫模块   -->  数据   -->  引擎   -->  管道(Pipeline):保存数据
  5. 爬虫模块   -->  请求   -->  爬虫中间件   -->  引擎   -->  调度器

scrapy各个组件作用

  •    引擎模块:调度各个模块, 以及模块间数据传递.
  •    调度器模块:请求去重, 缓存请求(队列)
  •    下载器: 发送请求, 获取响应数据
  •    爬虫模块:解析响应数据, 提取数据, 提取请求
  •    管道模块:处理数据, 比如:保存数据
  •    下载器中间件: 在引擎和下载器之间, 把请求交给下载器之前, 可以对请求进行处理, 比如设置代理, 设置随机请求头.
  •    爬虫中间件: 在引擎和爬虫之间, 可以请求和响应数据进行过滤.

ScrapyShell

  使用格式:scrapy shell URL

作用

  1. 可以用于测试response常见属性和方法
  2. 可用于用于测试/调试XPATH

response中重要属性

  • response.body:响应的二进制数据
  • response.text: 响应的文本字符串数据
  • response.url: 响应的URL
  • response.request.headers: 响应对应的请求的请求头

settings.py中的设置信息

  • ROBOTSTXT_OBEY 是否遵守robots协议,默认是遵守
  • DOWNLOAD_DELAY 下载延迟,默认0.5~1.5的随机延迟
  • COOKIES_ENABLED 是否开启cookie,即每次请求带上前一次的cookie,默认是开启的
  • DEFAULT_REQUEST_HEADERS 设置默认请求头
  • DOWNLOADER_MIDDLEWARES 下载中间件
  • LOG_LEVEL 控制日志输出的级别
  •   日志等级: DEBUG,INFO,WARNING,ERROR,CRITICAL
  • LOG_FILE 设置log日志文件的保存路径, 如果设置该参数,终端将不再显示日志信息

回调函数之间数据的传递

yield scrapy.Requst(url,[callback,method,headers,body,cookies,meta,dont_filter])

  • callback:表示当前的url的响应交给哪个函数去处理
  • meta:实现数据在不同的解析函数中传递,设置代理IP
  •    meta={'xx':yy}:在callback函数中使用response.meta['xx']获取传递过来的yy的数据
  • dont_filter:默认为False,会过滤请求的url地址,即请求过的url地址不会继续被请求,对需要重复请求的url地址可以把它设置为True
  • method:指定POST或GET请求
  • headers:接收一个字典,其中不包括cookies
  • cookies:接收一个字典,专门放置cookies
  • body:接收字符串格式:name=aa&age=bb

scrapy中间件

  1.   先书写middlewares文件内部的process_request方法
  2.   再在setting文件中打开配置信息
DOWNLOADER_MIDDLEWARES = {
'middle.middlewares.MiddleDownloaderMiddleware': 543,
}
USER_AGENT_LIST = [
'',
'',
'...',] PROXY_LIST = [
'14.106.27.137:8118',
'27.193.49.150:8118',
'12.86.54.194:8118',
'115.218.132.203:8118',
'182.96.203.11:49225',
'114.249.112.65:9000',
'43.248.122.251:8123',
]

Downloader Middlewares默认的方法

process_request(self, request, spider)

  •     当每个request通过下载中间件时,该方法被调用。
  •     返回None值:继续请求
  •     返回Response对象:不再请求,把response返回给引擎
  •     返回Request对象:把request对象交给引擎 -> 调度器进行后续的请求

process_response(self, request, response, spider)

  •     当下载器完成http请求,传递响应给引擎的时候调用
  •     返回Resposne:交给process_response来处理
  •     返回Request对象:交给调取器继续请求
    def process_request(self, request, spider):
# 处理请求的下载器中间件
# Called for each request that goes through the downloader
# 每当有一个request经过下载中间件的时候,那么此方法就会被调用
# 随机获取一个user_agent
# USER_AGENT_LIST/PROXY_LIST:setting中配置
"""
随机User-Agent下载器中间件
1.在settings.py中准备USER_AGENT_LIST列表
2.实现 process_request`方法
3.随机中USER_AGENT_LIST, 选出一个UserAgent设置给request
request.headers['User-Agent']
在settings.py中配置中间件
"""
ua = random.choice(USER_AGENT_LIST)
request.headers['User-Agent'] = ua
"""
代理IP下载器中间件
request.meta['proxy']
"""
p = random.choice(PROXY_LIST)
request.meta['proxy'] = p
# return None 这个请求继续执行
# return request 换了一个新的请求,把request对象交给引擎 -> 调度器进行后续的请求
# return response 根本不会再发送请求,把response返回给引擎
return None

爬虫之scrapy简介的更多相关文章

  1. 网络爬虫框架Scrapy简介

    作者: 黄进(QQ:7149101) 一. 网络爬虫 网络爬虫(又被称为网页蜘蛛,网络机器人),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本:它是一个自动提取网页的程序,它为搜索引擎从万维 ...

  2. Python爬虫框架Scrapy安装使用步骤

    一.爬虫框架Scarpy简介Scrapy 是一个快速的高层次的屏幕抓取和网页爬虫框架,爬取网站,从网站页面得到结构化的数据,它有着广泛的用途,从数据挖掘到监测和自动测试,Scrapy完全用Python ...

  3. 97、爬虫框架scrapy

    本篇导航: 介绍与安装 命令行工具 项目结构以及爬虫应用简介 Spiders 其它介绍 爬取亚马逊商品信息   一.介绍与安装 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, ...

  4. 爬虫(scrapy第一篇)

    ---------------------------------------------------------------------------------------------------- ...

  5. 爬虫框架Scrapy 之(一) --- scrapy初识

    Scrapy框架简介 scrapy是基于Twisted的一个第三方爬虫框架,许多功能已经被封装好,方便提取结构性的数据.其可以应用在数据挖掘,信息处理等方面.提供了许多的爬虫的基类,帮我们更简便使用爬 ...

  6. 爬虫框架 Scrapy

    一 介绍 crapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速.简单.可扩展的方式从网站中提取所需的数据.但目前Scrapy的用途十分广泛,可用 ...

  7. Python 爬虫七 Scrapy

    Scrapy Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了页面抓取 (更确切来说, 网络抓取 )所设 ...

  8. 5、爬虫之scrapy框架

    一 scrapy框架简介 1 介绍 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速.简单.可扩展的方式从网站中提取所需的数据.但目前Sc ...

  9. 05 爬虫之scrapy

    一 scrapy框架简介 01 什么是scrapy: Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍.所谓的框架就是一个已经被集成了各种功能(高性能异步下载,队 ...

随机推荐

  1. Android 手机端自动化测试框架

    前言: 大概有4个月没有更新了,因项目和工作原因,忙的手忙脚乱,趁十一假期好好休息一下,年龄大了身体还是扛不住啊,哈哈.这次更新Android端自动化测试框架,也想开源到github,这样有人使用才能 ...

  2. 面试|简单描述MySQL中,索引,主键,唯一索引,联合索引 的区别,对数据库的性能有什么影响(从读写两方面)

    索引是一种特殊的文件(InnoDB 数据表上的索引是表空间的一个组成部分),它们 包含着对数据表里所有记录的引用指针. 普通索引(由关键字 KEY 或 INDEX 定义的索引)的唯一任务是加快对数据的 ...

  3. (八十三)c#Winform自定义控件-导航菜单(扩展)

    前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kwwwvagaa/NetWinformControl 码云:ht ...

  4. 04-Django模型(1)

    ---恢复内容开始--- 模型 MTV图解 ORM ORM全拼:Object-Relation-Mapping翻译就是对象关系映射.在MVC/MTV设计模式中的Model模块中都包括ORM.主要实现模 ...

  5. k8s pod访问不通外网问题排查

    环境概况 自建k8s集群,主机操作系统ubuntu16.04,k8s版本v1.14, 集群网络方案calico-3.3.6. worker节点数50+,均为GPU物理服务器,服务器类型异构,如Nvid ...

  6. Android系统介绍与框架

    一.Andriod是什么? Android系统是Google开发的一款开源移动OS,Android中文名被国内用户俗称“安卓”.Android操作系统基于Linux内核设计,使用了Google公司自己 ...

  7. mac下安装jmeter

    jmeter官网下载 双击解压 命令行进入/Users/yanguobin/apache-jmeter-5.1.1/bin目录下,输入sh jmeter即可启动 也可以 配置环境变量 vim ~/.b ...

  8. 如何使用Externalizable接口自定义Java中的序列化

    Java序列化过程的缺点 我们都知道如何使用Serializable接口序列化/反序列化一个对象,并且如何使用writeObject 和readObject方法自定义序列化过程. 但是这些自定义还不够 ...

  9. java高并发_博客-网址-资料 推荐

    大概说一下自己作为入门学习java高并发的博客地址,很不错在自己的博客里记录一下:如果能有刷到我的博客的骚年,又刚好想了解java高并发,强烈推荐看看 地址:http://www.itsoku.com ...

  10. html、css、javascript之间的关系

    网页主要由三部分组成: 结构( Structure) . 表现( Presentation) 和行为( Behavior)HTML —— 结构, 决定网页的结构和内容( “是什么”)CSS —— 表现 ...