Scrapy安装和简单使用
模块安装
Windows
安装scrapy 需要安装依赖环境twisted,twisted又需要安装C++的依赖环境
pip install scrapy 时 如果出现twisted错误
在https://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载对应的Twisted的版本文件(cp36代表python3.6版本)
再cmd进入到Twisted所在的目录 执行pip install 加Twisted文件名
最后执行pip install scrapy
Ubuntu安装注意事项
不要使用 python-scrapyUbuntu提供的软件包,它们通常太旧而且速度慢,无法赶上最新的Scrapy
要在Ubuntu(或基于Ubuntu)系统上安装scrapy,您需要安装这些依赖项
sudo apt-get install python-dev python-pip libxml2-dev libxslt1-dev zlib1g-dev libffi-dev libssl-dev
如果你想在python3上安装scrapy,你还需要Python3的开发头文件
sudo apt-get install python3-dev
在virtualenv中,你可以使用pip安装Scrapy:pip install scrapy
简单使用
新建项目
scrapy startproject project_name
编写爬虫
第一种方式:创建单个文件
创建一个类,它必须继承scrapy.Spider类,需要定义三个属性
name: spider的名字,必须且唯一
start_urls: 初始的url列表
parse(self, response) 方法:每个初始url完成之后被调用
这个parse函数要完成两个功能
1、解析响应,封装成item对象并返回这个对象
2、提取新的需要下载的url,创建新的request,并返回它
单个文件的运行命令 scrapy runspider demo.py
第二种方式:通过命令创建
scrapy genspider 爬虫名 域名
运行爬虫
scrapy list 查看可以运行的爬虫文件
scrapy crawl 爬虫名(name属性的值)
追踪链接
创建一个类变量page_num用来记录当前爬取到的页码,在parse函数中提取信息,然后通过爬虫对象给变量page__num自加1,构造下一页的url,然后创建scrapy.Request对象并返回
如果response中提取不到信息,我们判断已经到了最后一页,parse函数直接return结束
定义item管道
parse函数在解析出我们需要的信息之后,可以将这些信息打包成一个字典对象或scray.Item对象,然后返回
这个对象会被发送到item管道,该管道会通过顺序执行几个组件处理它。每个item管道组件是一个实现简单方法的Python类
它们收到一个item并对其执行操作,同时决定该item是否应该继续通过管道或者被丢弃并且不再处理
item管道的典型用途:
清理HTML数据
验证已删除的数据(检查项目是否包含某些字段)
检查重复项(并删除它们)
将已爬取的item进行数据持久化
编写管道类
#在爬虫启动时执行 def open_ spider(self, spider)
#在爬虫关闭时,执行 def close_ spider(self, spider)
#对传递过来的item处理并return处理完的item def process_ item(self, item, spider)
要激活这个管道组件,必须将其添加到ITEM_PIPELINES设置中,在settings文件中设置
在此设置中为类分配的整数值决定了它们运行的顺序:按照从较低值到较高值的顺序进行
定义item
Scrapy提供了Item类
编辑项目目录下的items.py文件
在爬虫中导入我们定义的Item类,实例化后用它进行数据结构化
运行流程
数据流
首先从爬虫获取初始的请求
将请求放入调度模块,然后获取下一个需要爬取的请求
调度模块返回下一个需要爬取的请求给引擎
引擎将请求发送给下载器,依次穿过所有的下载中间件
一旦页面下载完成,下载器会返回一个响应包含了页面数据,然后再依次穿过所有的下载中间件
引擎从下载器接收到响应,然后发送给爬虫进行解析,依次穿过所有的爬虫中间件
爬虫处理接收到的响应,然后解析出item和生成新的请求,并发送给引擎
引擎将已经处理好的item发送给管道组件,将生成好的新的请求发送给调度模块,并请求下一个请求
该过程重复,直到调度程序不再有请求为止
组件
spiders 爬虫程序 处理response 提取需要的数据 或其他要抓取的请求
engine 引擎 引擎负责控制系统所有组件之间的数据流,并在发生某些操作时触发事件
scheduler调度器 接收request请求 排队加入队列
download下载器 负责引擎发送过来的request请求 进行下载
item pipelines 管道 负责spider返回的数据 进行存储
中间件
下载中间件
下载中间件是位于引擎和下载器之间的特定的钩子,它们处理从引擎传递到下载器的请求,以及下载器传递到引擎的响应
使用Downloader中间件执行以下操作
在请求发送到下载程序之前处理请求(即在scrapy将请求发送到网站之前)
在响应发送给爬虫之前
直接发送新的请求,而不是将收到的响应传递给蜘蛛
将响应传递给爬行器而不获取web页面
默默的放弃一些请求
爬虫中间件
爬虫中间件是位于引擎和爬虫之间的特定的钩子,能够处理传入的响应和传递出去的item和请求
使用爬虫中间件执行以下操作
处理爬虫回调之后的 请求或item
处理start_requests
处理爬虫异常
根据响应内容调用errback而不是回调请求
事件驱动的网络
scrapy是用Twisted编写的,Twisted是一个流行的事件驱动的Python网络框架。它使用非阻塞(也称为异步)代码实现并发
Scrapy安装和简单使用的更多相关文章
- Python爬虫框架--Scrapy安装以及简单实用
scrapy框架 框架 -具有很多功能且具有很强通用性的一个项目模板 环境安装: Linux: pip3 install scrapy Windows: ...
- Python之Scrapy爬虫框架安装及简单使用
题记:早已听闻python爬虫框架的大名.近些天学习了下其中的Scrapy爬虫框架,将自己理解的跟大家分享.有表述不当之处,望大神们斧正. 一.初窥Scrapy Scrapy是一个为了爬取网站数据,提 ...
- Python -- Scrapy 框架简单介绍(Scrapy 安装及项目创建)
Python -- Scrapy 框架简单介绍 最近在学习python 爬虫,先后了解学习urllib.urllib2.requests等,后来发现爬虫也有很多框架,而推荐学习最多就是Scrapy框架 ...
- python Scrapy安装和介绍
python Scrapy安装和介绍 Windows7下安装1.执行easy_install Scrapy Centos6.5下安装 1.库文件安装yum install libxslt-devel ...
- 转:Scrapy安装、爬虫入门教程、爬虫实例(豆瓣电影爬虫)
Scrapy在window上的安装教程见下面的链接:Scrapy安装教程 上述安装教程已实践,可行.(本来打算在ubuntu上安装Scrapy的,但是Ubuntu 磁盘空间太少了,还没扩展磁盘空间,所 ...
- Scrapy安装、爬虫入门教程、爬虫实例(豆瓣电影爬虫)
Scrapy在window上的安装教程见下面的链接:Scrapy安装教程 上述安装教程已实践,可行.(本来打算在ubuntu上安装Scrapy的,但是Ubuntu 磁盘空间太少了,还没扩展磁盘空间,所 ...
- python爬虫框架—Scrapy安装及创建项目
linux版本安装 pip3 install scrapy 安装完成 windows版本安装 pip install wheel 下载twisted,网址:http://www.lfd.uci.edu ...
- 第五篇 scrapy安装及目录结构,启动spider项目
实际上安装scrapy框架时,需要安装很多依赖包,因此建议用pip安装,这里我就直接使用pycharm的安装功能直接搜索scrapy安装好了. 然后进入虚拟环境创建一个scrapy工程: (third ...
- scrapy安装及入门使用
scrapy安装及入门使用 安装 pip3.7 install Scrapy 输入scrapy命令查看是否安装成功 J-pro:myproject will$ scrapy Scrapy 2.1.0 ...
随机推荐
- java之动态代理设计模式
代理:专门完成代理请求的操作类,是所有动态代理类的父类,通过此类为一个或多个接口动态地生成实现类. 弄清动态代理的关键是清楚java的反射机制,在https://www.cnblogs.com/xix ...
- Python中的四种交换数值的方法
交换两个变量的值方法,这个面试题如果只写一种当然很简单,没什么可以说的. 今天这个面试是问大家有几种办法来实现交换两个变量的值. 在没开始看具体答案前,你可以先想想看 下面分别来说说这几种方法 方法一 ...
- Burp Suite渗透操作指南 【暴力破解】
1.1 Intruder高效暴力破解 其实更喜欢称Intruder爆破为Fuzzing.Intruder支持多种爆破模式.分别是:单一字典爆破.多字段相同字典爆破.多字典意义对应爆破.聚合式爆破.最常 ...
- Sunset: Vulnhub Walkthrough
主机扫描: ╰─ nmap -p1-65535 -sV -A 10.10.202.147 PORT STATE SERVICE VERSION21/tcp open ftp pyftpdlib 1.5 ...
- arcgis api for javascript 学习(七) 调用发布地图信息,并将地图属性信息输出到Excel表格---进阶版
我们在arcgis api for javascript 学习(三)已经学习到了关于调用地图信息进行属性输出的问题,不过通过代码我们实现后会发现还是有一些小瑕疵的,比如我们只能单个数据属性的输出,如果 ...
- JDK8,Optional
作为程序员,你肯定遇到过NullPointerException, 这个异常对于初出茅庐的新人, 还是久经江湖的老手都是不可避免的痛, 可又是那么的无能为力,为了解决它,你只能在使用某个值之前,对其 ...
- 如何使用 CODING 实践 DevOps 全流程
你好,欢迎使用 CODING!这份最佳实践将帮助你通过 CODING 研发管理系统来更好地实践 DevOps 流程. DevOps 的本质是打破各个部门之间的隔阂,打通企业的前中后台,推进跨部门协作. ...
- Go Modules使用教程
Go Modules 不完全教程 文章转载自公众号 Golang 成神之路 , 作者 L Go Modules 是 Golang 官方最近几个版本推出的原生的包管理方式,在此之前,社区也不乏多种包管理 ...
- 基于 Unity 的一种透明通道压缩处理
由于 Android 平台各种硬件标准的不统一,为了开发的软件项目能够在大部分 Android 机上完美运行,我们需要以较差的硬件支持为基础做准备. Android 平台基本上都支持对不带 Alpha ...
- element-ui 中Switch的用法
在element-ui中,如果你想知道Switch是开还是关,使用事件 @change="getchange(value2)" 它会输出true或者false.true代表的是开, ...