爬虫之scrapy简介
Scrapy框架与原始爬虫的区别
原始爬虫
效率低、同步、阻塞
Scrapy框架
效率高、异步、非阻塞
Scrapy的概念
- 爬虫框架
- 开发速度快
- 稳定性高
- 性能优越
scrapy的流程
- 爬虫模块(Spiders) --> 准备起始URL(Request) --> 爬虫中间件 --> 引擎 --> 调度器(Scheduler):请求去重, 缓存请求(队列)
- 调度器 --> 请求(Request) --> 引擎 --> 下载器中间件 --> 下载器:发送请求, 获取响应, 把响应封装为Response对象
- 下载器 -Response --> 下载器中间件 --> 引擎 --> 爬虫中间件 --> 爬虫模块:解析响应数据, 提取数据, 提取请求
- 爬虫模块 --> 数据 --> 引擎 --> 管道(Pipeline):保存数据
- 爬虫模块 --> 请求 --> 爬虫中间件 --> 引擎 --> 调度器
scrapy各个组件作用
- 引擎模块:调度各个模块, 以及模块间数据传递.
- 调度器模块:请求去重, 缓存请求(队列)
- 下载器: 发送请求, 获取响应数据
- 爬虫模块:解析响应数据, 提取数据, 提取请求
- 管道模块:处理数据, 比如:保存数据
- 下载器中间件: 在引擎和下载器之间, 把请求交给下载器之前, 可以对请求进行处理, 比如设置代理, 设置随机请求头.
- 爬虫中间件: 在引擎和爬虫之间, 可以请求和响应数据进行过滤.
ScrapyShell
使用格式:scrapy shell URL
作用
- 可以用于测试response常见属性和方法
- 可用于用于测试/调试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中间件
- 先书写middlewares文件内部的process_request方法
- 再在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简介的更多相关文章
- 网络爬虫框架Scrapy简介
作者: 黄进(QQ:7149101) 一. 网络爬虫 网络爬虫(又被称为网页蜘蛛,网络机器人),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本:它是一个自动提取网页的程序,它为搜索引擎从万维 ...
- Python爬虫框架Scrapy安装使用步骤
一.爬虫框架Scarpy简介Scrapy 是一个快速的高层次的屏幕抓取和网页爬虫框架,爬取网站,从网站页面得到结构化的数据,它有着广泛的用途,从数据挖掘到监测和自动测试,Scrapy完全用Python ...
- 97、爬虫框架scrapy
本篇导航: 介绍与安装 命令行工具 项目结构以及爬虫应用简介 Spiders 其它介绍 爬取亚马逊商品信息 一.介绍与安装 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, ...
- 爬虫(scrapy第一篇)
---------------------------------------------------------------------------------------------------- ...
- 爬虫框架Scrapy 之(一) --- scrapy初识
Scrapy框架简介 scrapy是基于Twisted的一个第三方爬虫框架,许多功能已经被封装好,方便提取结构性的数据.其可以应用在数据挖掘,信息处理等方面.提供了许多的爬虫的基类,帮我们更简便使用爬 ...
- 爬虫框架 Scrapy
一 介绍 crapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速.简单.可扩展的方式从网站中提取所需的数据.但目前Scrapy的用途十分广泛,可用 ...
- Python 爬虫七 Scrapy
Scrapy Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了页面抓取 (更确切来说, 网络抓取 )所设 ...
- 5、爬虫之scrapy框架
一 scrapy框架简介 1 介绍 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速.简单.可扩展的方式从网站中提取所需的数据.但目前Sc ...
- 05 爬虫之scrapy
一 scrapy框架简介 01 什么是scrapy: Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍.所谓的框架就是一个已经被集成了各种功能(高性能异步下载,队 ...
随机推荐
- [UWP] 解决FlipView图片放大的诡异bug
想要实现图片的放大缩小可以通过在Image外面套一个ScrollViewer,然后设置ScrollViewer的ZoomMode="Enabled" <FlipView It ...
- 快学Scala 第十一课 (类继承)
类继承: class People { } class Emp extends People{ } 和Java一样,final的类不能被继承.final的字段和方法不能被override. 在Scal ...
- JAVAWEB第一节课的课后思考
第一开发一个网站需要的一些技术 至少熟悉一种建站程序.(html,javascript等等)对空间和域名的知识有一定的了解.有一些美工基础(例如ps设计等等).对编程有一些了解.HTML的代码知识基本 ...
- Mac 10.14 安装抓包工具Fiddler
环境安装 第一步: 首先,Mac下需要使用.Net编译后的程序,需要用到跨平台的方案Mono(现阶段微软已推出跨平台的方案.Net Core,不过暂时只支持控制台程序).安装程序可以从http://w ...
- SpringBoot2.x升级踩坑--新增Configuration property name限制
最近公司项目在做SpringBoot的升级,在升级过程中遇到了一些问题,简单记录一下,做个分享.另外,本文中的程序只为示例代码,并非公司生产环境代码. 遇到什么问题 从SpringBoot1.x升级到 ...
- django根据已有数据库表生成model类
django根据已有数据库表生成model类 创建一个Django项目 django-admin startproject 'xxxx' 修改setting文件,在setting里面设置你要连接的数据 ...
- Windows 服务程序(二)
服务控制管理器 (SCM, Service Control Manager),它在系统启动时自动启动,其主要作用是维护和管理一张服务信息表. OpenSCManager() 介绍:功能:建立了一个到服 ...
- CentOS 7.6 Telnet服务搭建(Openssh升级之战 第一任务备用运输线搭建)
(以下内容亲手完成,如果需要搬走记得把写博的小白的名字和邮箱一起搬走) 出来玩(学习),总是要还的! 有不明的问题的时候,都来博客园转转,总能找到答案或者灵感,开博3个月都没发一篇帖(不晓得管理员有何 ...
- prototype与 _proto__的关系
prototype与 __ proto__ 都是在这个过程中催生的产物,我们一会儿马上讨论,在这之...做对象即可,那javascript种究竟是通过什么来明确继承关系的呢. 一.构造函数: 构造函数 ...
- Cocos2d-x 学习笔记(12) Speed Follow
Speed Follow都是直接继承了Action. Speed对其他action进行包装,改变action的速度. Follow可用于node在scene中的运动,scene将node作为Follo ...